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 サイトの他の関連記事を参照してください。