1

私は 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 lxmlelementtreeまたは Python でさえも機能する方法について、何か基本的なことが欠けているのではないかと思います。誰かがここで何が起こっているのか説明してもらえますか?

4

1 に答える 1