当 XPath 验证器返回正确结果时,为啥 XmlNode.SelectNodes 返回空列表?

Posted

技术标签:

【中文标题】当 XPath 验证器返回正确结果时,为啥 XmlNode.SelectNodes 返回空列表?【英文标题】:Why XmlNode.SelectNodes returns empty list when XPath validator returns correct result?当 XPath 验证器返回正确结果时,为什么 XmlNode.SelectNodes 返回空列表? 【发布时间】:2016-06-27 09:48:21 【问题描述】:

代码在 IronPython 中,这里是:

for systemNode in csResultXML.SelectNodes("Response/SubSystems/SubSystem"):

    itemNodes = systemNode.SelectNodes('/SubSystem/Items/Item')

单循环循环中systemNode的值为:

<SubSystem ID="0">
  <Items>
    <Item>
      <Quantity>1</Quantity>
      <TotalPrice>0.0</TotalPrice>
    </Item>
    <Item>
      <Quantity>1</Quantity>
      <TotalPrice>0.0</TotalPrice>
    </Item>
  </Items>
</SubSystem>

当代码完成时,itemNodes 是一个空列表。

为什么? XPath 在线验证器正确返回结果。

谢谢你的时间

【问题讨论】:

【参考方案1】:

您需要使用systemNode.SelectNodes('Items/Item'),因为您要选择上下文节点的Items 子元素(您的systemNode 变量)而不是文档节点/Items 子元素。

【讨论】:

马丁,抱歉。我正在使用 systemNode.SelectNodes('/SubSystem/Items/Item') ,我在顶部复制/粘贴了一个播放选项。我正在编辑问题。但你是对的,这确实解决了问题。我不知道为什么 systemNode.SelectNodes('/SubSystem/Items/Item') 不起作用。 您的第一个表达式选择SubSystem 元素,然后要选择其中的元素,您需要使用像Items/Item 这样的相对路径,而不是以/ 开头的绝对路径。当然,如果上下文节点已经是 SubSystem 元素,则不能再次以 SubSystem 开头,除非您嵌套了 SubSystem 元素。

以上是关于当 XPath 验证器返回正确结果时,为啥 XmlNode.SelectNodes 返回空列表?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 XPath 表达式在 XML 文档中找不到新添加的节点?

4.xpath注入详解

当 XPATH 不存在时,s-s-rS 返回具有一行的数据集

jmeter察看结果树结果,为啥响应断言为true时,也是红色的?

isAbstract() 修饰符返回不正确的结果 - 为啥?

当列表分页的大小输入设置为大于 15 时,Spring Data PagedListHolder 没有返回正确的 PageSize,为啥?