首页 文章

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

提问于
浏览
0

我试图使用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 回答

  • 0

    你不能用XPath做到这一点 .

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

  • 2

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

    无论您使用什么软件来显示XPath结果,都必须决定如何显示这些“指针” . 最常见的约定是显示以您选择的节点为根的整个XML树 . 这不是唯一的方法;某些工具更喜欢显示从根到所选节点的路径 . 但重要的是区分XPath选择的内容(节点),显示方式(显示整个子树或根目录的路径) .

    如果您希望输出包含输入中的不同XML,那么您对XPath的运气不佳 . 为此,您需要XSLT或XQuery . XPath严格从输入树中选择节点 .

相关问题