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']因为. 是你目前的元素