ElementTree の「find」および「findall」メソッドでの XML 名前空間の無視
ElementTree モジュールを使用して XML ドキュメント内の要素を解析および検索する場合、名前空間は複雑さを引き起こす可能性があります。 Python で "find" メソッドと "findall" メソッドを使用するときに名前空間を無視する方法は次のとおりです。
この問題は、XML ドキュメントに名前空間が含まれている場合に発生し、ElementTree モジュールがタグを検索するときにそれらの名前空間を考慮する可能性があります。質問で示されている例で示されているように、これは予期しない結果につながる可能性があります:
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
名前空間を無視するには、解決策は次のとおりです。 「find」または「findall」メソッドを使用する前に、解析された XML ドキュメント内のタグを変更します。これは、ElementTree の iterparse() メソッドを使用して実現できます:
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
このソリューションでは、解析されたドキュメント内のタグが変更され、各タグの名前空間プレフィックスを手動で指定する必要がなく、要素を簡単に見つけられるようになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3