首页 文章

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

提问于
浏览
0

给定以下XML,如何选择 uid 元素,其前面的兄弟是注释,其标准化文本值等于"VID_1128"或"Some Title"?这里的问题是"Some Title"在两个 <uid> 元素之前,所以我只想选择值为 3333uid 元素 . 这可能与XPath 1.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>

1 回答

  • 0

    这可以通过XPath-1.0实现,其方法如下:

    /uids/uid[normalize-space(preceding-sibling::comment()[1]) = 'VID_1128' and normalize-space(preceding-sibling::comment()[2]) = 'Some Title']
    

    您的目标有一个区别:

    是标准化文本值等于“VID_1128”或“某些 Headers ”的注释?

    上面的XPath表达式遵循 and 的条件,而不是两个谓词之间的 or . 必须这样做才能仅选择 3333 作为结果 .

    使用 or 而不是 and 将导致节点集具有两个值:2222和3333 - 这不是您想要的 .

相关问题