xmllint 选择一个节点,即使 contains() 不应该匹配
xmllint selects a node even though contains() should not match
我有这个 CML 输入:
<prova>
<parent>
<groupId>error</groupId>
</parent>
<groupId>ok</groupId>
</prova>
和这个 XPath:
xmllint --xpath '/prova/parent/groupId/text()[contains(.,'ok')]'
它不应该匹配任何东西,但它匹配 error
。为什么?
不要使用嵌套单引号:
xmllint --xpath '/prova/parent/groupId/text()[contains(.,"ok")]' test.xml
结果
XPath set is empty
解释:
shell 将 '/prova/parent/groupId/text()[contains(.,'ok')]'
视为
/prova/parent/groupId/text()[contains(.,ok)]
在此 XPath 中,ok
被解释为元素名称。元素 <ok>
不存在,因此选择一个空节点集。
为了contains()
,空节点集被转换为空字符串。并且任何字符串都包含空字符串,因此条件始终为真。
我有这个 CML 输入:
<prova>
<parent>
<groupId>error</groupId>
</parent>
<groupId>ok</groupId>
</prova>
和这个 XPath:
xmllint --xpath '/prova/parent/groupId/text()[contains(.,'ok')]'
它不应该匹配任何东西,但它匹配 error
。为什么?
不要使用嵌套单引号:
xmllint --xpath '/prova/parent/groupId/text()[contains(.,"ok")]' test.xml
结果
XPath set is empty
解释:
shell 将 '/prova/parent/groupId/text()[contains(.,'ok')]'
视为
/prova/parent/groupId/text()[contains(.,ok)]
在此 XPath 中,ok
被解释为元素名称。元素 <ok>
不存在,因此选择一个空节点集。
为了contains()
,空节点集被转换为空字符串。并且任何字符串都包含空字符串,因此条件始终为真。