繁体   English   中英

XPath:按名称排除元素(递归)

[英]XPath: excluding elements by name (recursive)

我试图使用XPath从XML输入中排除某些元素。 在以下示例中, 我需要排除所有“ X”元素

我以为我只需要使用//*[not(self::X)]类的XPath查询,但这似乎不适用于所有平台。

我在这2个网站中尝试过:

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>

您不能使用XPath做到这一点。

XPath只能选择整个子树,而不能修改它们/构造新结果。 您需要使用XQuery或使用某些DOM接口来选择和删除<X/>元素(可以使用XPath查询//X来找到它们)。

XPath从输入文档的树表示中选择节点。 如果愿意,可以考虑将指针返回到树数据结构中。

然后,无论使用什么软件来显示XPath结果,都必须决定如何显示这些“指针”。 最常用的约定是显示植根于所选节点的整个XML树。 这不是唯一的方法。 一些工具更喜欢显示从根到所选节点的路径。 但是重要的是,要从显示的方式(显示整个子树或到根的路径)中区分正在选择的XPath(节点)。

如果您希望输出包含与输入不同的XML,那么XPath会让您很不走运。 为此,您需要XSLT或XQuery。 XPath严格从输入树中选择节点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM