Python で XML を本格的に扱うには、lxml を使用します
Python には ElementTree 組み込みライブラリが付属していますが、lxml は速度と機能 (スキーマ検証、sax 解析、XPath、さまざまな種類の反復子、およびその他の多くの機能) の点でそれを拡張します。
インストールする必要がありますが、多くの場所では、すでに標準装備の一部であると想定されています (たとえば、Google AppEngine は C ベースの Python パッケージを許可していませんが、lxml、pyyaml、およびその他のいくつかについては例外を設けています)。
E-factory を使用した XML ドキュメントの構築 (lxml から)
あなたの質問は、XML 文書の作成に関するものです。
lxmlには多くのメソッドがあり、使いやすく読みやすいと思われるメソッドを見つけるのに時間がかかりました。
E-factory の使用に関する lxml doc のサンプル コード(少し簡略化):
E-factory は、XML および HTML を生成するためのシンプルでコンパクトな構文を提供します。
>>> from lxml.builder import E
>>> html = page = (
... E.html( # create an Element called "html"
... E.head(
... E.title("This is a sample document")
... ),
... E.body(
... E.h1("Hello!"),
... E.p("This is a paragraph with ", E.b("bold"), " text in it!"),
... E.p("This is another paragraph, with a", "\n ",
... E.a("link", href="http://www.python.org"), "."),
... E.p("Here are some reserved characters: <spam&egg>."),
... )
... )
... )
>>> print(etree.tostring(page, pretty_print=True))
<html>
<head>
<title>This is a sample document</title>
</head>
<body>
<h1>Hello!</h1>
<p>This is a paragraph with <b>bold</b> text in it!</p>
<p>This is another paragraph, with a
<a href="http://www.python.org">link</a>.</p>
<p>Here are some reserved characters: <spam&egg>.</p>
</body>
</html>
私はE-factoryに次のことを感謝します
コードは結果の XML ドキュメントとほぼ同じように読み取れます
読みやすさが重要です。
任意の XML コンテンツを作成できます
次のようなものをサポートします。
- 名前空間の使用
- 1 つの要素内のテキスト ノードの開始と終了
- 属性コンテンツをフォーマットする関数 (完全な lxml サンプルの func CLASS を参照)
リストで非常に読みやすい構造を許可します
例えば:
from lxml import etree
from lxml.builder import E
lst = ["alfa", "beta", "gama"]
xml = E.root(*[E.record(itm) for itm in lst])
etree.tostring(xml, pretty_print=True)
その結果:
<root>
<record>alfa</record>
<record>beta</record>
<record>gama</record>
</root>
結論
lxml チュートリアルを読むことを強くお勧めします。このチュートリアルは非常によく書かれており、この強力なライブラリを使用する理由がさらにたくさんあります。
lxml の唯一の欠点は、コンパイルする必要があることです。ほんの一瞬で wheel 形式のパッケージから lxml をインストールする方法の詳細については、SO の回答を参照してください。