[英]XPath: excluding elements by name (recursive)
我試圖使用XPath從XML輸入中排除某些元素。 在以下示例中, 我需要排除所有“ X”元素 。
我以為我只需要使用//*[not(self::X)]
類的XPath查詢,但這似乎不適用於所有平台。
我在這2個網站中嘗試過:
對於第一個,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.