私は PyKML を使用していくつかの KML ファイルを作成していますが、誰かが説明してくれることを願っています。以下は問題を再現します。
from lxml import etree
from pykml.factory import KML_ElementMaker as KML
doc1 = KML.kml(KML.Document())
doc2 = KML.kml(KML.Document())
p = KML.Placemark()
doc1.Document.append(p)
doc2.Document.append(p)
print etree.tostring(etree.ElementTree(doc1),pretty_print=True)
print etree.tostring(etree.ElementTree(doc2),pretty_print=True)
そしてここに出力があります:
<kml xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://www.opengis.net/kml/2.2">
<Document/>
</kml>
<kml xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Placemark/>
</Document>
</kml>
場所マークは 2 番目のドキュメントに表示されますが、最初のドキュメントには表示されません。一度に 1 つのファイルにのみ Placemark を追加できるかのようです。
最後の数行を次のように並べ替えると、うまくいきます。
doc1.Document.append(p)
print etree.tostring(etree.ElementTree(doc1),pretty_print=True)
doc2.Document.append(p)
print etree.tostring(etree.ElementTree(doc2),pretty_print=True)
そして出力:
<kml xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Placemark/>
</Document>
</kml>
<kml xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Placemark/>
</Document>
</kml>
しかし、これにはコードの大幅な再構築が必要になるため、これは回避したいと考えています。
PyKML lxml
、elementtree
または Python でさえも機能する方法について、何か基本的なことが欠けているのではないかと思います。誰かがここで何が起こっているのか説明してもらえますか?