【问题标题】:Expression must evaluate to node set in Xpath error while trying to get value在尝试获取值时,表达式必须评估为 Xpath 错误中的节点集
【发布时间】:2015-12-14 17:14:33
【问题描述】:

我在尝试获取具有 Home 和 Auto 值的节点时出错。 任何帮助表示赞赏。

XElement coverage = vehicle.XPathSelectElement("s0:VehicleCoverage/s0:Coverages/[CoverageLimitName=('Auto' |'Home')]", namespaceManager);

我喜欢抓取下的节点

<Coverages>
  <Coverage>
    <CoverageLimitName>Home</CoverageLimitName>
    <OptionalCode1>WY</OptionalCode1>
    <OptionalCode2>Bodily Injury</OptionalCode2>
    </CoverageLimitValue>
    <Premium>166.00</Premium>
  </Coverage>
  <Coverage>
    <CoverageLimitName>Auto</CoverageLimitName>
    <CoverageLimitValue>
      <OptionalCode1>T</OptionalCode1>
      <OptionalCode2>Property Damage</OptionalCode2>
    </CoverageLimitValue>
    <Premium>88.00</Premium>
  </Coverage>
  <Coverage>
  </Coverage>
  ....
  </Coverage>
</Coverages>

我只想使用 xpath,并希望在 CoverageLimitName 为 home 和 auto 时获取整个覆盖率标签

【问题讨论】:

  • 请编辑您的问题,并根据您显示的 XML 文档显示您对 XPath 表达式结果的期望。此外,表达式和文档相互矛盾,因为 XPath 表达式中有前缀元素名称,但文档中没有。
  • 是的,正如@MathiasMüller 所说,包含在命名空间和结构方面正确的 XML 文档,否则我们只能猜测正确的结构。
  • 此外,您的 XML 实际上是无效的,因为它在问题中显示 - 第一个 Coverage 元素有一个结束 CoverageLimitValue 标记,但没有开始标记。以发布带有无效 XML 的问题为例,人们很难为您提供帮助。
  • @MathiasMüller:编辑了问题

标签: c# xml xpath


【解决方案1】:

我有根据的猜测是您想要以下内容:

/s0:VehicleCoverage/s0:Coverages/s0:Coverage[s0:CoverageLimitName = 'Auto' or s0:CoverageLimitName = 'Home']

对于您显示的文档,这将返回两个 Coverage 元素。 (假设名称空间得到了妥善处理。)

我们不得不猜测,因为您的示例 XML 文档缺少名称空间声明,而且您没有告诉我们您到底在寻找什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2011-03-29
    • 1970-01-01
    相关资源
    最近更新 更多