[英]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.