ホームページ  >  記事  >  バックエンド開発  >  ElementTree の要素の場所の名前空間を無視する方法: 簡単な解決策?

ElementTree の要素の場所の名前空間を無視する方法: 簡単な解決策?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-28 05:10:02923ブラウズ

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

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

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