ElementTree の要素の場所の名前空間を無視する
ElementTree の findall メソッドを使用して、名前空間を認識する XML ドキュメント内の要素を検索すると、次のようになります。各タグの名前空間を指定するために必要です。これにより、不都合が生じる可能性があります。この記事では、find や findall などの ElementTree 検索メソッドで名前空間を無視する方法を紹介します。
問題:
提供されたサンプル コードで示されているように、tree.findall( "DEAL_LEVEL/PAID_OFF") 呼び出しは、XML ファイル内の名前空間が無視されているため、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 中国語 Web サイトの他の関連記事を参照してください。