忽略ElementTree 元素位置中的命名空間
當使用ElementTree 中的findall 方法來定位命名空間感知的XML 文件中的元素時,它變成需要為每個標籤指定名稱空間。這可能會帶來不便。本文介紹了一種在 ElementTree 搜尋方法(如 find 和 findall)中忽略命名空間的方法。
問題:
如提供的範例程式碼所示,tree.findall(由於XML 檔案中忽略了命名空間,「DEAL_LEVEL/PAID_OFF」)呼叫返回None。在每個標籤中新增 {http://www.test.com} 是一個不方便的解決方法。
解決方案:
與其修改 XML 文檔,不如解析它並操作結果中的標籤。這允許處理多個命名空間和命名空間別名。
以下Python 程式碼提供了一個解決方案:
<code class="python">from io import StringIO # for Python 2 import from StringIO instead import xml.etree.ElementTree as ET # instead of ET.fromstring(xml) it = ET.iterparse(StringIO(xml)) for _, el in it: _, _, el.tag = el.tag.rpartition('}') # strip ns root = it.root</code>
說明:
此解決方案利用ET.iterparse 函數,增量處理XML 文檔。在迭代期間,透過使用 rpartition('}') 刪除命名空間來修改每個元素 el 的標籤。這有效地從所有標籤中剝離了命名空間。
好處:
這種方法允許您在搜尋元素時忽略命名空間前綴,從而簡化了過程並無需手動指定命名空間。
以上是如何忽略 ElementTree 元素位置中的命名空間:一個簡單的解決方案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!