好的,首先我有一个脚本,它运行在dos文件格式的XML文件上。也就是说,该文件具有\ r \ n行终止。此外,我正在操作的XML文件在某些属性中嵌入了一些换行符。生成XML的XML编辑器将这些换行符编码为:

我正在使用LXML,我正在进行的一些处理将这些文本属性更改为XML元素。我看到的问题是,带有换行符的文本块最终会作为元素,但在换行符之前会有一些问题。即
顺便说一下,相当于我理解的
。
现在,这对我来说似乎是一个问题,因为我正在执行的脚本是在linux环境中执行的,它会转储出一个linux文件格式的文件。
在我看来,好像LXML正确地看到

是一个转义的换行符,并为目标元素中的实际换行符更改了这一点。它似乎忘记了
。
我创建了一个测试xml文件:
<?xml version='1.0' encoding='UTF-8'?>
<element1>
<element2 value="0"/>
<element3 documentation="Some documentation.

Some more documentation"/>
</element1>
这是一个示例python文件,可以进行一些操作:
#!/usr/bin/env python
import re
import argparse
import sys
import lxml.etree as ET
xml = ET.parse('test.xml')
root = xml.getroot()
elem = root.find('element3')
doc = ET.SubElement(elem, 'documenation')
doc.text = elem.get('documentation')
xml.write('out.xml', encoding='UTF-8', method="xml", pretty_print=True)
这是输出:
<element1>
<element2 value="0"/>
<element3 documentation="Some documentation. Some more documentation"><documenation>Some documentation.
Some more documentation</documenation></element3>
</element1>
我想我的问题是这个,这是你们希望这个工作的方式吗? 我本以为在文档元素中,我们将不再拥有 再引用。 如果我现在必须为这些无关的CR字符进行一些grepping,这似乎有点不合适。
答案 0 :(得分:0)
是的,这正是我期望它发挥作用的方式。虽然XML处理器需要在输入上规范化行尾,但不需要在输出上规范化行尾。
如果我在你的位置,我会修复生成该XML的代码,以避免将回车放入属性中。没错,我试试:
doc.text = elem.get('documentation').replace('\r','')