簡體   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