考虑以下XML
<xml>
<tag/>
<tag version="2.1"/>
</xml>
我想要一个XPath 1.0表达式,如果我搜索版本2.1则返回<tag version="2.1"/>
,如果我搜索版本2.2则返回<tag/>
。
到目前为止,我已经尝试了
/xml/tag[@version = '%version%' or not(@version)]
其中%version%
是一个字符串,可以是2.1或2.2,但如果%version%
是2.1,则返回两个节点。
答案 0 :(得分:3)
您可以使用|
(或)
/xml[not(tag[@version="2.1"])]/tag[not(@version)] |
/xml[tag[@version="2.1"]]/tag[@version="2.1"]
xml
与tag
没有version="2.1"
,然后返回tag
没有version
属性的<{1}} xml
包含tag
version="2.1"
,请返回那就是你的情况
/xml[not(tag[@version='%version%'])]
/tag[not(@version)]
|
/xml[tag[@version='%version%']]
/tag[@version='%version%']
答案 1 :(得分:3)
作为xpath 2.0(如果相关)替代非常好的@paul答案,您可以使用
if (/xml/tag[@version = '2.1']) then /xml/tag[@version = '2.1'] else /xml/tag[not(@version)]
RESP。
if (/xml/tag[@version = '%version%']) then /xml/tag[@version = '%version'] else /xml/tag[not(@version)]