gpt4 book ai didi

python - 在 Python LXML 的 KML 文档中添加命名空间

转载 作者:行者123 更新时间:2023-12-04 16:54:13 25 4
gpt4 key购买 nike

我正在阅读有关 Google Extension 的引用资料:

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 的前两行的样子:
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document id="root_doc">

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

最佳答案

当您添加绑定(bind)到另一个命名空间的新元素时,将在序列化 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>

关于python - 在 Python LXML 的 KML 文档中添加命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58687766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com