【问题标题】:How to select element preceded by specific XML comments using XPath 1.0?如何使用 XPath 1.0 选择前面带有特定 XML 注释的元素?
【发布时间】:2018-12-30 09:26:09
【问题描述】:

鉴于以下 XML,我如何选择 uid 元素,其前面的兄弟是 cmets,其标准化文本值等于“VID_1128”或“某些标题”?这里的问题是“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>

【问题讨论】:

    标签: xml xpath


    【解决方案1】:

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

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

    你给定的目标有一个不同:

    标准化文本值是否等于“VID_1128”“某些标题”的 cmets?

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

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

    【讨论】:

    • 确实,我很好奇and 条件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多