我试图使用XPath从XML输入中排除一些元素 . 在以下示例中, I need to exclude all "X" elements .
我以为我只需要使用像_2648182这样的XPath查询,但这似乎并不适用于所有平台 .
我试过这两个网站:
http://chris.photobooks.com/xml/default.htm http://www.freeformatter.com/xpath-tester.html
对于第一个,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>
2 回答
你不能用XPath做到这一点 .
XPath只能选择整个子树,而不能修改它们/构造新结果 . 您需要使用XQuery或使用某些DOM接口来选择和删除
<X/>
元素(您可以使用XPath查询//X
找到它们) .XPath从输入文档的树表示中选择节点 . 如果您愿意,可以考虑将指针返回到树数据结构中 .
无论您使用什么软件来显示XPath结果,都必须决定如何显示这些“指针” . 最常见的约定是显示以您选择的节点为根的整个XML树 . 这不是唯一的方法;某些工具更喜欢显示从根到所选节点的路径 . 但重要的是区分XPath选择的内容(节点),显示方式(显示整个子树或根目录的路径) .
如果您希望输出包含输入中的不同XML,那么您对XPath的运气不佳 . 为此,您需要XSLT或XQuery . XPath严格从输入树中选择节点 .