当 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 文档中找不到新添加的节点?
当 XPATH 不存在时,s-s-rS 返回具有一行的数据集
jmeter察看结果树结果,为啥响应断言为true时,也是红色的?
isAbstract() 修饰符返回不正确的结果 - 为啥?
当列表分页的大小输入设置为大于 15 时,Spring Data PagedListHolder 没有返回正确的 PageSize,为啥?