我试图使用XPath从XML输入中排除某些元素。 在以下示例中,我需要排除所有" X"元素
我认为我必须使用像//*[not(self::X)]
这样的XPath查询,但这似乎并不适用于所有平台。
我试过这两个网站:
对于第一个,xml输出将按预期进行(X元素不会在输出中突出显示),但对于第二个,输出与输入完全相同。不幸的是,使用此XPath的软件与第二个网站具有相同的行为......
其他奇怪的事情:当我尝试//*[self::X]
时,我会在两个网站上获得所有X元素。
你能帮我解决这个简单的请求吗?我可能会遗漏一些明显的东西,但我对XPath查询还是很新的!感谢。
样品:
<ROOTNODE>
<ITEM>12345</ITEM>
<LEVELS COUNT="1">
<LEVEL>
<OFFICES COUNT="3">
<OFFICE>
<CODEOFF>21</CODEOFF>
<LIB>GALLEY AVANT</LIB>
<NIV>1</NIV>
<X>6</X>
<Y>78</Y>
<L>127</L>
<H>196</H>
<OBJECTS COUNT="7">
<OBJECT>
<CODEOBJ>G1C</CODEOBJ>
<LIB>GALLEY 1C</LIB>
<NIV>1</NIV>
<X>12</X>
<Y>143</Y>
<L>32</L>
<H>49</H>
</OBJECT>
<OBJECT>
<CODEOBJ>G1L</CODEOBJ>
<LIB>GALLEY 1L</LIB>
<NIV>1</NIV>
<X>32</X>
<Y>205</Y>
<L>34</L>
<H>29</H>
</OBJECT>
</OBJECTS>
</OFFICE>
</OFFICES>
</LEVEL>
</LEVELS>
</ROOTNODE>
答案 0 :(得分:3)
你不能用XPath做到这一点。
XPath只能选择整个子树,不能修改它们/构造新的结果。您需要使用XQuery或使用某些DOM接口来选择和删除<X/>
元素(您可以使用XPath查询//X
找到)。
答案 1 :(得分:1)
XPath从输入文档的树表示中选择节点。如果你愿意,可以考虑将指针返回到树数据结构中。
无论您使用什么软件来显示XPath结果,都必须决定如何显示这些“指针”。最常见的约定是显示以您选择的节点为根的整个XML树。这不是唯一的方法;某些工具更喜欢显示从根到所选节点的路径。但重要的是区分XPath正在选择的节点(节点)与显示方式(显示整个子树,或根节点的路径)。
如果您希望输出包含输入中的不同XML,那么您对XPath的运气不佳。为此,您需要XSLT或XQuery。 XPath严格从输入树中选择节点。