【问题标题】:XPathSelectElement on results from XPathSelectElementsXPathSelectElements 结果上的 XPathSelectElement
【发布时间】:2012-12-03 03:59:12
【问题描述】:

好的,有一些问题,我可以运行 XPathSelectElements 来获取我想要从中提取信息的三个(在这种特定情况下,尽管它可能是 X 个)节点集。我正在抓取一些符合 XHTML 的 HTML,并且必须使用 XPathSelectElements 来查找 X 个数,在本例中为 Order 对象。

考虑将 HTML/XML 简化为以下内容:

<RandomInfo>
<NAME>ASDSADS</NAME>
<WHAT>Dunno</NAME>
<div id='OrderResults'>
  <div id='order_foo'>
    <ID>1</ID>
    <Customer>Bill</Customer>
    <Total>500</Total>
  </div>
  <div id='order_bar'>
    <ID>2</ID>
    <Customer>Bob</Customer>
    <Total>200</Total>
  </div>
  <div id='order_abc'>
    <ID>1</ID>
    <Customer>Butch</Customer>
    <Total>100</Total>
  </div>
</div>
</RandomInfo>

“order_*”名称是动态的,不能用于选择节点。所以我有一个 XPathSelectElements 可以为我正确获取三个 div 的集合。但是,当我遍历每个返回的 XNode 并尝试调用 XPathSelectElement("//Customer") 时,我总是为那个 XPathSelectElement 调用返回相同的值。我可以使用 VS 查看节点对象正在发生变化,但 XPathSelectElement 没有从当前节点获取。如果显然以某种方式返回父节点/文档以获取值,我如何强制它“根”于自身?

【问题讨论】:

  • 欢迎来到Stack Overflow,可以发一个小sn-p的C#代码吗?谢谢

标签: c# xml linq xpath


【解决方案1】:

你可以使用这个 xpath

./Customer

.代表当前节点(通常隐含)

/ 代表该特定节点的子节点

【讨论】:

    【解决方案2】:

    并且 // 在 XPath 的开头表示文档根目录中的任何节点。所以你可能在任何节点,它总是匹配你文档的所有客户节点。 //(无论是在 xpath 的开头还是在中间)对性能非常不利,应该避免!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多