"的地方添加空格?-6ren"> "的地方添加空格?-当我解析 xml 文件,然后将结果写入输出文件时,原始文件中存在“/>”的地方都会添加一个空格。有什么办法可以阻止它被创建吗? 我已经编写了一些 python 代码来更新 xml 文件中的几个字段,并-6ren">
gpt4 book ai didi

python - 为什么在python中解析xml文件会在文件中 "/>"的地方添加空格?

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:56 25 4
gpt4 key购买 nike

当我解析 xml 文件,然后将结果写入输出文件时,原始文件中存在“/>”的地方都会添加一个空格。有什么办法可以阻止它被创建吗?

我已经编写了一些 python 代码来更新 xml 文件中的几个字段,并认为我已经一切正常,但是在原始文件和更新后的文件之间运行 sdiff 后,我注意到不仅仅是所需的行被更新。 xml 文件中凡是有“/>”的地方,都会有一个空格作为前缀“/>”。我注释掉了除解析命令和写入命令之外的所有代码,并能够验证解析或写入命令是否导致了问题。

选择源 XML 文件的内容:更新的 XML 文件:

<QcfName/>                              <QcfName />
<Icf/> <Icf />
<Bidirectional/> <Bidirectional />

代码(注释掉所有其他代码):

tree = ET.parse(inFile)

tree.write(outFile)

我不需要更新任何带有“/>”的条目以包含空格“/>”

最佳答案

我认为唯一的方法是重新定义ET._serialize_xml并删除硬编码的空格:

write(" />")

基本上只需从 ElementTree 复制整个函数,删除空格,然后使用 ET 更新任何函数/方法/类引用(例如 Comment 变为 ET.注释_escape_cdata(text)变为ET._escape_cdata(text)等)

虽然它并不漂亮,而且您还必须维护一些额外的东西。

示例...

XML 输入 (input.xml)

<doc>
<QcfName/>
<Icf/>
<Bidirectional/>
</doc>

Python

import xml.etree.ElementTree as ET


def local_serialize_xml(write, elem, qnames, namespaces,
short_empty_elements, **kwargs):
tag = elem.tag
text = elem.text
if tag is ET.Comment:
write("<!--%s-->" % text)
elif tag is ET.ProcessingInstruction:
write("<?%s?>" % text)
else:
tag = qnames[tag]
if tag is None:
if text:
write(ET._escape_cdata(text))
for e in elem:
local_serialize_xml(write, e, qnames, None,
short_empty_elements=short_empty_elements)
else:
write("<" + tag)
items = list(elem.items())
if items or namespaces:
if namespaces:
for v, k in sorted(namespaces.items(),
key=lambda x: x[1]): # sort on prefix
if k:
k = ":" + k
write(" xmlns%s=\"%s\"" % (
k,
ET._escape_attrib(v)
))
for k, v in sorted(items): # lexical order
if isinstance(k, ET.QName):
k = k.text
if isinstance(v, ET.QName):
v = qnames[v.text]
else:
v = ET._escape_attrib(v)
write(" %s=\"%s\"" % (qnames[k], v))
if text or len(elem) or not short_empty_elements:
write(">")
if text:
write(ET._escape_cdata(text))
for e in elem:
local_serialize_xml(write, e, qnames, None,
short_empty_elements=short_empty_elements)
write("</" + tag + ">")
else:
# CHANGED " />" TO "/>"
write("/>")
if elem.tail:
write(ET._escape_cdata(elem.tail))


ET._serialize_xml = local_serialize_xml


tree = ET.parse("input.xml")

tree.write("output.xml")

XML 输出 (output.xml)

<doc>
<QcfName/>
<Icf/>
<Bidirectional/>
</doc>

关于python - 为什么在python中解析xml文件会在文件中 "/>"的地方添加空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55959475/

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