给定以下XML:
<Fruits>
<TreeBearing>
<Name>Apple</Name>
</TreeBearing>
<TreeBearing>
<Name>Orange</Name>
</TreeBearing>
<TreeBearing>
<Name>Grape</Name>
</TreeBearing>
<TreeBearing>
<Name>Apple</Name>
</TreeBearing>
</Fruits>
XPath应该如何检查每个
<Name>
是否包含单词ple
?我尝试了
/Fruits/TreeBearing/Name/text()
,但我一直只获得第一个项目(即Apple)。如何遍历并获取所有包含ple
的元素? 最佳答案
确切地给出此输入XML,类似
/Fruits/TreeBearing/Name[contains(text(),'ple')]
将检索所有
Name
元素其第一个子文本节点包含
ple
(XPath 1.0)其唯一的文本节点包含
ple
(XPath 2.0)。如果有多个子文本节点,则将导致错误,而您需要使用contains(.,'ple')
。但是,在您输入的XML中,只有一个这样的元素。此外,如果有很多,您的XPath引擎可能只会返回第一个结果。
完全无关,但“水果”不是正确的英文复数形式-应该读为“水果”。
您的xpath还会返回布尔值还是Apple?
假设以下输入:
<Fruits>
<TreeBearing>
<Name>Apple1</Name>
</TreeBearing>
<TreeBearing>
<Name>Orange</Name>
</TreeBearing>
<TreeBearing>
<Name>Grape</Name>
</TreeBearing>
<TreeBearing>
<Name>Apple2</Name>
</TreeBearing>
</Fruits>
此路径表达式:
/Fruits/TreeBearing/Name[contains(text(),'ple')]
返回元素节点:
<Name>Apple1</Name>
-----------------------
<Name>Apple2</Name>
另一方面,
/Fruits/TreeBearing/Name[contains(text(),'ple')]/text()
只返回这些节点的文本内容:
Apple1
-----------------------
Apple2
最后,要返回表示您的输入中是否存在此类节点的布尔值,请使用
boolean(/Fruits/TreeBearing/Name[contains(text(),'ple')])