如何忽略 ElementTree 元素位置中的命名空間:一個簡單的解決方案?

Linda Hamilton
發布: 2024-10-28 05:10:02
原創
923 人瀏覽過

How to Ignore Namespaces in ElementTree's Element Location: A Simple Solution?

忽略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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!