LXML转义了字符转换

时间:2014-10-24 16:34:37

标签: python xml escaping character lxml

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


我正在使用LXML,我正在进行的一些处理将这些文本属性更改为XML元素。我看到的问题是,带有换行符的文本块最终会作为元素,但在换行符之前会有一些问题。即
顺便说一下,相当于我理解的

现在,这对我来说似乎是一个问题,因为我正在执行的脚本是在linux环境中执行的,它会转储出一个linux文件格式的文件。

在我看来,好像LXML正确地看到&#xA是一个转义的换行符,并为目标元素中的实际换行符更改了这一点。它似乎忘记了&#xD

我创建了一个测试xml文件:

<?xml version='1.0' encoding='UTF-8'?>
<element1>
  <element2 value="0"/>
  <element3 documentation="Some documentation.&#xD;&#xA;&#xD;&#xA;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.&#13;&#10;&#13;&#10;Some more documentation"><documenation>Some documentation.&#13;
&#13;
Some more documentation</documenation></element3>
</element1>

我想我的问题是这个,这是你们希望这个工作的方式吗? 我本以为在文档元素中,我们将不再拥有  再引用。 如果我现在必须为这些无关的CR字符进行一些grepping,这似乎有点不合适。

1 个答案:

答案 0 :(得分:0)

是的,这正是我期望它发挥作用的方式。虽然XML处理器需要在输入上规范化行尾,但不需要在输出上规范化行尾。

如果我在你的位置,我会修复生成该XML的代码,以避免将回车放入属性中。没错,我试试:

doc.text = elem.get('documentation').replace('\r','')