我是XPath的新手,我想区分这两个XPath。
1) /*/*:Employee/*:Firstname/*:Name[contains(.,abc)]
2) /*/*:Employee/*:Firstname/*:Name[abc]
我试图用Google搜索它,但是我不清楚。
您能以简单的方式解释这种区别吗?
答案 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}})