2009-04-14 38 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爲你逃避&符號(實際上它應該已經被轉義),然後當你需要顯示轉​​義值時,使用它來避開它。