如何使用XPath 1.0选择前面有特定XML注释的元素



给定以下XML,如何选择其前面的同级元素是规范化文本值等于"VID_1128"或"某些标题"的注释的uid元素?这里的问题是"Some Title"在两个<uid>元素之前,所以我只想选择值为3333uid元素。这可以用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,而这不是您想要的。

最新更新