gpt4 book ai didi

xml - 如何在保留现有命名空间的同时写入 XML 文件

转载 作者:行者123 更新时间:2023-12-04 17:06:17 26 4
gpt4 key购买 nike

当我解析一个 XML 文件时,在写入新的 XML 文件时,文件中的现有命名空间会被删除。如何在保留正在解析的文件中的现有命名空间的同时写入新的 XML 文件?

我尝试根据这篇文章中提供的答案注册命名空间,但没有看到我的最终结果有什么不同:Saving XML files using ElementTree

from xml.etree import ElementTree as ET

ET.register_namespace('xsi', "http://www.w3.org/2001/XMLSchema-instance")
ET.register_namespace('xsd', "http://www.w3.org/2001/XMLSchema")

tree = ET.parse(file_path)

tree.write('./new.xml',
xml_declaration = True,
encoding = 'utf-8',
method = 'xml')

原始 XML:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings>
<settingsList>
<setting name="ConnectionProperties" serializeAs="Xml">
<value>
<SftpConnectionProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name></Name>
</SftpConnectionProperties>
</value>
</setting>
<setting name="WebUrl" serializeAs="String">
<value>https://test.com</value>
</setting>
</settingsList>
</userSettings>
</configuration>

执行代码后的 XML:

<?xml version='1.0' encoding='utf-8'?>
<configuration>
<userSettings>
<settingsList>
<setting name="ConnectionProperties" serializeAs="Xml">
<value>
<SftpConnectionProperties>
<Name />
</SftpConnectionProperties>
</value>
</setting>
<setting name="WebUrl" serializeAs="String">
<value>https://test.com</value>
</setting>
</settingsList>
</userSettings>
</configuration>

我想在新的 XML 文件中保留来自原始 XML 文件的命名空间。

最佳答案

找到了这个站点,其中包含我需要生成所需输出的示例:http://effbot.org/zone/element-namespaces.htm

def parse_xmlns(file):

events = "start", "start-ns"

root = None
ns_map = []

for event, elem in ET.iterparse(file, events):

if event == "start-ns":
ns_map.append(elem)

elif event == "start":
if root is None:
root = elem
for prefix, uri in ns_map:
elem.set("xmlns:" + prefix, uri)
ns_map = []

return ET.ElementTree(root)

tree = parse_xmlns(config_path)

tree.write('./new.xml',
xml_declaration = True,
encoding = 'utf-8',
method = 'xml')

关于xml - 如何在保留现有命名空间的同时写入 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56553934/

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