在Python LXML中的KML文档中添加名称空间

我正在Google扩展上阅读此参考资料

https://developers.google.com/kml/documentation/kml

由于我需要使用带有gx前缀gx:drawOrder的Element,因此需要将名称空间更新为:

<kml xmlns="http://www.opengis.net/kml/2.2"
  xmlns:gx="http://www.google.com/kml/ext/2.2">

我先尝试确定元素,然后使用.set,但没有用。

有人可以帮忙吗?

这是我的KML的前2行:

<kml xmlns="http://www.opengis.net/kml/2.2">
<Document id="root_doc">

我认为更改第一行是一项简单的工作。

coffee3582 回答:在Python LXML中的KML文档中添加名称空间

当添加绑定到另一个名称空间的新元素时,当XML文件被序列化时,将自动插入该名称空间的声明。默认情况下,声明不会出现在根元素上,并且前缀可能不是您想要的。

演示:

from lxml import etree

# Parse original XML
orig_xml = '<kml xmlns="http://www.opengis.net/kml/2.2"/>'
root = etree.fromstring(orig_xml)

ns = "http://www.google.com/kml/ext/2.2"

# Add new element in other namespace as child of root
test = etree.SubElement(root,etree.QName(ns,"drawOrder"))

print(etree.tostring(root,pretty_print=True).decode())

输出:

<kml xmlns="http://www.opengis.net/kml/2.2">
  <ns0:drawOrder xmlns:ns0="http://www.google.com/kml/ext/2.2"/>
</kml>

这是一个很好的,格式正确的XML文档,但可能不是您想要的。可以使用cleanup_namespaces()来解决。在print()调用之前添加以下行:

etree.cleanup_namespaces(root,top_nsmap={"gx": ns})

新输出:

<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
  <gx:drawOrder/>
</kml>
本文链接:https://www.f2er.com/3168876.html

大家都在问