Xpath条件分支

时间:2019-06-24 11:41:05

标签: xml xslt xpath

我是XPath的新手,我想区分这两个XPath。

1) /*/*:Employee/*:Firstname/*:Name[contains(.,abc)]
2) /*/*:Employee/*:Firstname/*:Name[abc]

我试图用Google搜索它,但是我不清楚。

您能以简单的方式解释这种区别吗?

1 个答案:

答案 0 :(得分:2)

contains是一个字符串函数,用于检查第一个字符串是否包含第二个字符串(或者如果您愿意,第二个字符串是否是第一个子字符串)。如果字符串函数的参数是节点(例如Name),它将获取要使用的该节点的字符串值。它不用于检查节点是否包含特定的子节点。

因此,Name[contains(.,abc)]表示“ Name元素的字符串值是否包含子abc元素的字符串值?”

这是一件奇怪的事情,因为对于所有Name元素来说总是如此。节点的字符串值包括所有后代的文本。并且如果没有子abc,则字符串值将为空字符串,因此表达式仍为true。

例如,如果节点为<Name>1<abc>2</abc></Name>,则Name的字符串值为“ 12”,其中显然包含abc的字符串值为“ 2”。 / p>

另一方面,如果子Name[abc]存在,则Name将获得abc元素,而不管字符串值是什么。因此,它将匹配<Name><abc /></Name>但不匹配<Name/>

(有可能,第一个表达式应该是Name[contains(.,'abc')],在这种情况下,它将匹配包含字符串“ abc”的Name个元素。因此,它将匹配<Name>abcdef</Name>但不匹配{ {1}})