Python 不会将 \r\n 写入 XML 文件
Python won't write \r\n to XML file
我正在使用 python 生成 XML 文件。 XML 文件的属性需要 \r\n
来表示换行符(常规 \n
不适用于此应用程序)。这是我尝试生成的 XML 文件的示例:
<root>
<tag attrib="multiple lines here"></tag>
</root>
注意
是 \n
的 XML 转义字符编码,
是 \r
。
这是我的 python 代码来生成这个 XML 文件:
import xml.etree.ElementTree as ET
root = ET.Element('root')
tag = ET.SubElement(root, 'tag')
tag.set('attrib', 'multiple\r\nlines\r\nhere')
xml_file = 'test.xml'
tree = ET.ElementTree(root)
tree.write(xml_file)
输出:<root><tag attrib="multiple lines here" /></root>
很明显,\r
从输出 XML 中剥离了。如何将 \r\n
添加到我的 XML 文件?
经过几个小时的搜索,我最终发现它是 XML 包中的一个错误(参见 https://bugs.python.org/issue39011)。据我所知,在 cpython github 页面上,这已在 Python 3.9 上修复,但在任何更早的版本上都没有。对于没有错误修复的版本,这里是我使用的解决方法:
with open(xml_file, 'r') as f:
lines = f.read()
with open(xml_file, 'w') as f:
lines = f.write(lines.replace(' ', ' ')
在您创建一个没有 \r\n
的 XML 文件后,您打开它并将属性中出现的任何 \n
替换为 \r\n
。
我正在使用 python 生成 XML 文件。 XML 文件的属性需要 \r\n
来表示换行符(常规 \n
不适用于此应用程序)。这是我尝试生成的 XML 文件的示例:
<root>
<tag attrib="multiple lines here"></tag>
</root>
注意
是 \n
的 XML 转义字符编码,
是 \r
。
这是我的 python 代码来生成这个 XML 文件:
import xml.etree.ElementTree as ET
root = ET.Element('root')
tag = ET.SubElement(root, 'tag')
tag.set('attrib', 'multiple\r\nlines\r\nhere')
xml_file = 'test.xml'
tree = ET.ElementTree(root)
tree.write(xml_file)
输出:<root><tag attrib="multiple lines here" /></root>
很明显,\r
从输出 XML 中剥离了。如何将 \r\n
添加到我的 XML 文件?
经过几个小时的搜索,我最终发现它是 XML 包中的一个错误(参见 https://bugs.python.org/issue39011)。据我所知,在 cpython github 页面上,这已在 Python 3.9 上修复,但在任何更早的版本上都没有。对于没有错误修复的版本,这里是我使用的解决方法:
with open(xml_file, 'r') as f:
lines = f.read()
with open(xml_file, 'w') as f:
lines = f.write(lines.replace(' ', ' ')
在您创建一个没有 \r\n
的 XML 文件后,您打开它并将属性中出现的任何 \n
替换为 \r\n
。