给定以下XML,如何选择其前面的同级元素是规范化文本值等于"VID_1128"或"某些标题"的注释的uid
元素?这里的问题是"Some Title"在两个<uid>
元素之前,所以我只想选择值为3333
的uid
元素。这可以用XPath1.0实现吗?如果可以,如何实现?
<?xml version="1.0"?>
<uids>
<!-- Some Unique Text -->
<!-- VID_2564 -->
<uid>1111</uid>
<!-- Some Title -->
<!-- VID_8374 -->
<uid>2222</uid>
<!-- Some Title -->
<!-- VID_1128 -->
<uid>3333</uid>
<!-- A Different Title -->
<!-- VID_9581 -->
<uid>4444</uid>
</uids>
XPath-1.0可以做到这一点,方法如下:
/uids/uid[normalize-space(preceding-sibling::comment()[1]) = 'VID_1128' and normalize-space(preceding-sibling::comment()[2]) = 'Some Title']
你的既定目标有一个区别:
规范化文本值是否等于"VID_1128">或"某个标题"?
上面的XPath表达式遵循两个谓词之间的and
条件,而不是or
条件。必须这样做才能仅选择3333
作为结果。
使用or
而不是and
会产生一个具有两个值的节点集:2222和3333,而这不是您想要的。