Python 不会将 \r\n 写入 XML 文件

Python won't write \r\n to XML file

我正在使用 python 生成 XML 文件。 XML 文件的属性需要 \r\n 来表示换行符(常规 \n 不适用于此应用程序)。这是我尝试生成的 XML 文件的示例:

<root>
    <tag attrib="multiple&#13;&#10;lines&#13;&#10;here"></tag>
</root>

注意 &#10;\n 的 XML 转义字符编码,&#13;\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&#10;lines&#10;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('&#10;', '&#13;&#10;')

在您创建一个没有 \r\n 的 XML 文件后,您打开它并将属性中出现的任何 \n 替换为 \r\n