鉴于此 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>
/*[not(self::actors)]
返回整个文档而不删除任何内容。/*[not(descendant-or-self::actors)]
返回NO MATCH!
的测试服务在https://www.freeformatter.com/xpath-tester.htmlXPath 表达式选择提供的输入文档中的节点。他们无法更改输入文档。“root”元素有“actors”作为子元素,如果你选择它,它仍然会有“actors”作为子元素。
同样,如果您选择 foo:singers 元素,它仍将“root”作为父元素。
许多显示 XPath 表达式结果的客户端应用程序选择显示以选定节点为根的子树,而忽略树中的其他节点。这只是显示结果的一种方式:您需要将 XPath 表达式选择的节点与显示结果时在屏幕上显示的节点区分开来。
如果要创建不同的树,其中“根”没有“演员”子级,则需要 XSLT 或 XQuery。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句