【问题标题】:How to get attribute value based on node value using xpath如何使用xpath根据节点值获取属性值
【发布时间】:2011-11-20 02:38:00
【问题描述】:

我正在处理 Orbeon 表单,我必须使用 Xpath 来检索属性值。我的场景如下所述。

我有一个如下的 xml 节点。

<n>
<node>
<page id='1'>true</page>
<page id='2'>false</page>
<page id='3'>true</page>
<page id='4'>true</page>
<page id='5'>false</page>
<page id='6'>true</page>
</node>
</n>

现在,当我将任何属性值传递给 xpath 时,它应该返回属性值,它会在其中找到下一个值为“true”的节点。例如,如果我通过 id=1,那么我应该得到结果为 3,因为在 之后,下一个具有 true 的节点是 。请注意我只能得到 3 而不是 3,4 和 6。

我已经尝试过类似下面的方法,但我没有得到预期的结果。

/n/node/page[@id>"1" and .='true']/@id

扩展我的问题:

如果我给出最后一个值并期望下一个属性值必须为真,则应适用相同的情况。例子。如果我给 6,xpath 表达式应该给我 4。我不介意我是否必须为此使用另一个 xpath 表达式。

请帮帮我。

【问题讨论】:

    标签: xml xpath orbeon


    【解决方案1】:

    尝试使用

    /n/node/page[@id>"1" and .='true']/@id[position() < 2]
    

    扩展我的答案:

    你也可以使用

    /n/node/page[@id>"1" and .='true']/@id[last() - 1]
    

    【讨论】:

    • 您好,感谢您的回复。我不认为 postion()
    【解决方案2】:

    我猜您希望获得@id 大于1 且内容等于true 的第一页。那么下面的就可以了:

    (/n/node/page[@id>"1" and .='true'])[1]/@id/string()
    

    与您所拥有的相比,选择“第一个匹配的项目......”是使用 (…)[1] 完成的,我在最后使用 /string() 来获取属性的值。根据您使用此表达式的位置,这不是必需的,因为该属性将为您转换为字符串。

    【讨论】:

    • 感谢 Avernet。这个有效。对于我的问题的第二部分,我使用如下并且工作正常。 (/n/node/page[@id
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多