ホームページ  >  記事  >  バックエンド開発  >  Python で ElementTree の「find」および「findall」メソッドを使用するときに XML 名前空間を無視する方法

Python で ElementTree の「find」および「findall」メソッドを使用するときに XML 名前空間を無視する方法

DDD
DDDオリジナル
2024-10-26 11:56:03956ブラウズ

How to Ignore XML Namespaces when Using ElementTree's

ElementTree の「find」および「findall」メソッドで XML 名前空間を無視する

ElementTree モジュールを使用して XML ドキュメント内の要素を解析および検索する場合、名前空間は複雑さを引き起こす可能性があります。 Python で「find」および「findall」メソッドを使用するときに名前空間を無視する方法は次のとおりです。

この問題は、XML ドキュメントに名前空間が含まれている場合に発生し、ElementTree モジュールがタグを検索するときにそれらの名前空間を考慮する可能性があります。質問で示されている例で示されているように、これは予期しない結果につながる可能性があります:

<code class="python">el1 = tree.findall("DEAL_LEVEL/PAID_OFF")  # Return None
el2 = tree.findall("{http://www.test.com}DEAL_LEVEL/{http://www.test.com}PAID_OFF")  # Return element</code>

名前空間を無視するには、解決策は、「検索」または「」を使用する前に、解析された XML ドキュメント内のタグを変更することです。 findall」メソッド。これは、ElementTree の iterparse() メソッドを使用して実現できます。

<code class="python">import io
from xml.etree import ElementTree as ET

# Parse the XML document
it = ET.iterparse(StringIO(xml))

# Iterate over each element and strip the namespace if present
for _, el in it:
    _, _, el.tag = el.tag.rpartition("}")  # strip ns

# Get the modified root element
root = it.root

# Now, you can search for elements without namespaces
el3 = root.findall("DEAL_LEVEL/PAID_OFF")  # Return matching elements</code>

このソリューションは、解析されたドキュメント内のタグを変更するため、各タグの名前空間プレフィックスを手動で指定する必要がなく、要素を簡単に見つけられるようになります。

以上がPython で ElementTree の「find」および「findall」メソッドを使用するときに XML 名前空間を無視する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。