XPath-选择等于值的元素
在Xpath中,我希望选择等于特定值的元素 示例XML数据:XPath-选择等于值的元素,xpath,Xpath,在Xpath中,我希望选择等于特定值的元素 示例XML数据: <aaa id="11" > <aaa id="21" > <aaa id="31" ></aaa> <bbb id="32" > <aaa id="41" ></aaa> <bbb id="42" ></bbb> &
<aaa id="11" >
<aaa id="21" >
<aaa id="31" ></aaa>
<bbb id="32" >
<aaa id="41" ></aaa>
<bbb id="42" ></bbb>
<ccc id="43" ></ccc>
<ddd id="44" >qwerty</ddd>
<ddd id="45" ></ddd>
<ddd id="46" ></ddd>
</bbb>
</aaa>
<bbb id="22" >
<aaa id="33" >qwerty</aaa>
<bbb id="34" ></bbb>
<ccc id="35" ></ccc>
<ddd id="36" ></ddd>
<ddd id="37" ></ddd>
<ddd id="38" ></ddd>
</bbb>
<ccc id="23" >qwerty</ccc>
<ccc id="24" ></ccc>
</aaa>
我得到了正确的预期结果:
现在,使用XPath:
//ccc[.='qwerty']
//aaa[.='qwerty']
我得到了意想不到的结果:
我特别感兴趣的是如何选择具有该值的任何元素
XPath:
//*[.='qwerty']
我得到了非常奇怪的意外结果:
有人能解释一下这些结果,以及如何修复我的XPath表达式以获得更多预期结果吗?试试看
/*[text()='qwerty']
因为
是您的当前元素XPath规范。将元素的字符串值定义为其所有文本节点子代的串联(按文档顺序)
这就解释了“奇怪的结果”
使用以下表达式可获得“更好”的结果:
//*[text() = 'qwerty']
上面选择文档中至少有一个值为“qwerty”的文本节点子元素的每个元素
//*[text() = 'qwerty' and not(text()[2])]
上面选择文档中只有一个子文本节点的每个元素,其值为:“qwerty”。@iHeartGrik:很高兴它能工作。接受/投票怎么样
text()
是XPath中可能的节点测试之一,意思是“这是文本节点吗?”。其他节点测试包括comment()
,processing-instruction()
,或者仅仅是node()
。因为XPath=代码>不同于XPathtext()=
。查看以了解原因。
//*[text() = 'qwerty' and not(text()[2])]
//*[text() = 'qwerty']
//*[text() = 'qwerty' and not(text()[2])]