代码之家  ›  专栏  ›  技术社区  ›  Pete Duncanson

xpath头痛,查找属性介于范围之间的节点

  •  1
  • Pete Duncanson  · 技术社区  · 15 年前

    头在这个上面疼,所以有人能给我一条线吗?

    XML是这样的(不是真正的东西,但为了清晰起见,这是一个示例):

    <root>
        <groups name="A">
            <entry from="1" to="10" />
        </groups>
        <groups name="A">
            <entry from="11" to="20" />
            <entry from="21" to="30" />
        </groups>
        <groups name="A">
            <entry from="31" to="40" />
            <entry from="41" to="50" />
            <entry from="51" to="60" />
        </groups>       
    </root>
    

    给定一个条目号,我想找到这个编号介于两者之间的条目节点。应该只有一个匹配的节点(如果有)。

    这是我使用的xpath:

    /根/组/条目[@From>=45和@To<=45]

    我也试过将这些属性包装在number()中,但仍然没有运气。

    这不是我期望的回报,事实上,它什么也没有回报,我不明白为什么!我错过了什么?

    编辑:更正了我的开头组标签的错误…对不起。

    1 回复  |  直到 15 年前
        1
  •  3
  •   Welbog    15 年前

    这个特殊的表达式没有返回任何内容,因为没有 entry 满足条件的元素。首先,我建议将其更改为:

    /root/groups/entry[@from <= 45 and @to >= 45]
    

    另外,如果这确实是源XML,那么它将无法工作,因为它是无效的。你有 <group> 打开标签,但是 </groups> 关闭标签。它们不匹配。你应该把它们全部换成 group groups ,您的xpath表达式应该反映这一点。

    我根据修改后的XML版本测试了该表达式(使用 改为 )并按预期返回一个结果:

    <entry from="41" to="50" />