XPath由于名称空间更改而获得具有本地名称的后继同级节点

时间:2018-12-13 09:59:36

标签: xml xpath

我已经仔细阅读了先前的几个问题,这些问题涉及如何选择以下同级元素,但是当我尝试忽略名称空间以选择以下元素时,似乎无法做到这一点。

这是XML示例

<root xmlns:foo="http://www.foo.org/">
    <foo:singers>
        <foo:singer>Tom Waits</foo:singer>
        <foo:value>4000</foo:value>
        <foo:singer>B.B. King</foo:singer>
        <foo:value>2000</foo:value>
    </foo:singers>
</root>

我想根据节点的值(例如Tom Waits之后的4000)获取节点后的值。

到目前为止我有什么

//*[local-name()='singer' and text() = 'Tom Waits']/following-sibling::*//*[local-name() = 'value']

不幸的是,这不适用于我。

我可以做类似的事情

//*[local-name()='singer' and text() = 'Tom Waits']/following-sibling::foo:value/text()

可以,但是我更希望能够忽略命名空间'foo'。

1 个答案:

答案 0 :(得分:1)

您与目前为止的状况很接近。
您所需要做的就是在*//*

之后用*替换following-sibling
//*[local-name()='singer' and text() = 'Tom Waits']/following-sibling::*[local-name() = 'value']/text()