2009-04-14 37 views
0

我需要在我的XML节点以下的属性值:如何在节点属性中写&符号?

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

其实这是在VS2008生成的.vcproj文件的一部分。 
&#x0A意味着换行,因为应该有两个单独的命令。

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

如何正确存储

UPD:确切地讲,我必须存放不&,但在 &#X0A的形式\ r \ n序列

+0


 (你忘了放大器后的分号) – bortzmeyer 2009-04-14 08:46:30

+0

@easyeurope:暂时可以用cmd.exe中的&运算符链接命令,如下所示:“copy $(TargetPath).. \ .. \回声虚拟> dummy.txt“。也许这有帮助。 – Tomalak 2009-04-14 18:09:34

回答

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"/>' 
1

你应该尝试在属性值存储的实际字符(ASCII 13和ASCII 10) ,而不是他们已经逃过的同行。


编辑:它看起来像minidom不正确地处理属性值中的换行符。

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

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

+0

我应该在输出中有我的转义序列 - 这是VS2008所做的。 – user68416 2009-04-14 07:09:03

+0

DOM将根据XML规则处理字符转义。不要担心转义序列,只需存储您希望存储的*数据。 – Tomalak 2009-04-14 07:16:54

0

&符号在XML中是特殊字符,因此大多数XML解析器,以便需要有效的XML的功能。让minidom为你逃避&符号(实际上它应该已经被转义),然后当你需要显示转​​义值时,使用它来避开它。