簡體   English   中英

如何使用 libxml2 過濾掉節點

[英]How to filter out nodes using libxml2

給定一個 XML 文檔和一個 XPath 表達式,我想創建一個新文檔,其中包含原始文檔的所有節點,但由 XPath 表達式選擇的節點除外,有效地給出了一個過濾器的結果。

我的想法是使用xmlXpathEvalExpression() function,並且對於根文檔樹中的每個節點,復制該節點,除非該節點與返回的xmlNodeSet匹配。 但是,libxml2 沒有給出關於如何或是否可以測試節點是否相等的提示。

您是否應該比較指向返回集中節點的指針? 或者你應該比較給定的節點名稱/命名空間?

如評論中所述,從評估 XPath 表達式返回的節點指針直接指向原始文檔中的節點。 [1]因此,您只需在返回的節點集中的每個節點上調用xmlUnlinkNode即可將其從文檔中刪除。 然后,在第二步中,在每個節點上調用xmlFreeNode以釋放節點。 在取消鏈接所有節點之前不要調用xmlFreeNode很重要。 [2]

[1] 除了從命名空間軸namespace::*返回的命名空間節點,類型為XML_NAMESPACE_DECL ,但這些很少使用。

[2] 如果您以相反的順序迭代節點集,它應該可以立即釋放每個節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM