如何在节点属性中编写&符号?

时间:2009-04-14 06:57:22

标签: python xml

我需要在XML节点中使用以下属性值:

CommandLine="copy $(TargetPath) ..\..\
echo dummy > dummy.txt"

实际上这是VS2008中生成的.vcproj文件的一部分。 
&#x0A表示换行符,因为应该有两个单独的命令。

我正在使用Python 2.5和minidom来解析XML - 但遗憾的是我不知道如何存储像
这样的序列,我能得到的最好的东西是&amp#x0D;

如何准确存储

UPD:确切地说,我必须存储不是&,而是\ r \ n序列的形式 &#x0A

3 个答案:

答案 0 :(得分:1)

您应该尝试将实际字符(ASCII 13和ASCII 10)存储在属性值中,而不是存储已经转义的对应字符。


编辑:看起来minidom无法正确处理属性值中的换行符。

即使允许属性值中的文字换行符,但在文档解析时它将面临规范化,此时它将转换为空格。

我在这方面提出了一个错误:http://bugs.python.org/issue5752

答案 1 :(得分:1)

  

我正在使用Python 2.5和minidom来解析XML - 但不幸的是我不知道如何存储像

好吧,你不能具体指定你想要十六进制转义,但根据DOM LS标准,实现应该自动将属性值中的\ r \ n更改为字符引用。

不幸的是,minidom没有:

>>> from xml.dom import minidom
>>> document= minidom.parseString('<a/>')
>>> document.documentElement.setAttribute('a', 'a\r\nb')
>>> document.toxml()
u'<?xml version="1.0" ?><a a="a\r\nb"/>'

这是minidom中的一个错误。在另一个DOM中尝试相同的操作(例如pxdom):

>>> import pxdom
>>> document= pxdom.parseString('<a/>')
>>> document.documentElement.setAttribute('a', 'a\r\nb')
>>> document.pxdomContent
u'<?xml version="1.0" ?><a a="a&#13;&#10;b"/>'

答案 2 :(得分:0)

&符号是XML中的特殊字符,因此大多数xml解析器需要有效的xml才能运行。让minidom为你逃脱&符号(实际上它应该已经被转义)然后当你需要显示转​​义值时,转换它。