XPath – select等于值的元素
在Xpath中,我想要select等于特定值的元素。
XML数据示例:
<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']
我得到了正确的, 预期的结果:
Name Value ccc qwerty
现在,使用XPath:
//aaa[.='qwerty']
我意想不到的结果是:
Name Value aaa aaa qwerty
而我特别感兴趣的是如何select任何具有该值的元素
XPath的:
//*[.='qwerty']
我得到非常奇怪的意外结果:
Name Value aaa bbb ddd qwerty bbb qwerty aaa qwerty ccc qwerty
有人可以解释这些结果,以及如何解决我的XPathexpression式,以获得更多的预期结果?
XPath规范。 将元素的string值定义为所有文本节点后代的连接(按文档顺序) 。
这解释了“奇怪的结果”。
使用下面的expression式可以获得“更好”的结果:
//*[text() = 'qwerty']
以上select文档中至less包含一个值为“qwerty”的文本节点子元素的每个元素。
//*[text() = 'qwerty' and not(text()[2])]
以上select文档中只有一个文本节点子元素的每个元素,其值为:“qwerty”。
尝试
//*[text()='qwerty']
因为.
是你目前的元素