PyKML:将地标附加到多个 KML 文档
PyKML : appending a Placemark to more than one KML document
我正在使用 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>
地点标记出现在第二个文档中,但没有出现在第一个文档中。
就好像 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 工作原理的基本知识。有人可以解释一下这里可能发生的事情吗?
(部分回答 - 仍然希望得到解释!)
如果我这样做:
from copy import deepcopy
doc1.Document.append(deepcopy(p))
doc2.Document.append(deepcopy(p))
一切正常。但是,etree.tostring
对输入对象 doc1
和 doc2
做了什么?好像它们正在以某种方式被改变。
我正在使用 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>
地点标记出现在第二个文档中,但没有出现在第一个文档中。 就好像 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 工作原理的基本知识。有人可以解释一下这里可能发生的事情吗?
(部分回答 - 仍然希望得到解释!)
如果我这样做:
from copy import deepcopy
doc1.Document.append(deepcopy(p))
doc2.Document.append(deepcopy(p))
一切正常。但是,etree.tostring
对输入对象 doc1
和 doc2
做了什么?好像它们正在以某种方式被改变。