使用xpath表达式

时间:2018-02-20 14:18:15

标签: xpath

鉴于此xml

<root xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org">
    <actors>
        <actor id="1">Christian Bale</actor>
        <actor id="2">Liam Neeson</actor>
        <actor id="3">Michael Caine</actor>
    </actors>
    <foo:singers>
        <foo:singer id="4">Tom Waits</foo:singer>
        <foo:singer id="5">B.B. King</foo:singer>
        <foo:singer id="6">Ray Charles</foo:singer>
    </foo:singers>
</root>

我想排除actors和所有actor元素。

此xpath

/root/*[not(self::actors)] 

返回

<foo:singers xmlns:foo="http://www.foo.org/">
    <foo:singer id="4">Tom Waits</foo:singer>
    <foo:singer id="5">B.B. King</foo:singer>
    <foo:singer id="6">Ray Charles</foo:singer>
</foo:singers>

而我想要

<root xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org">
    <foo:singers>
        <foo:singer id="4">Tom Waits</foo:singer>
        <foo:singer id="5">B.B. King</foo:singer>
        <foo:singer id="6">Ray Charles</foo:singer>
    </foo:singers>
</root>

1 个答案:

答案 0 :(得分:1)

XPath表达式选择提供的输入文档中的节点。他们无法对输入文档进行更改。 &#34; root&#34;元素有&#34;演员&#34;作为一个孩子,如果你选择它,它仍然会有&#34;演员&#34;小时候。

同样,如果选择foo:singers元素,它仍然会有&#34; root&#34;作为父母。

显示XPath表达式结果的许多客户端应用程序选择显示以所选节点为根的子树,忽略树中的其他节点。这只是显示结果的一种方式:您需要区分XPath表达式选择的节点与显示结果时屏幕上显示的节点。

如果要创建一个不同的树,其中&#34; root&#34;没有&#34;演员&#34;孩子,你需要XSLT或XQuery。

相关问题