2012-12-19 119 views
4

我有解析xml文件並執行命令的python腳本。我想讓我的xml讀取另一個xml文件並對其進行編輯。爲此我使用perl命令在xml中轉義xml標籤

"perl -pi -0777 -e '[email protected]<en:TagName>.*?</en:TagName>@<en:TagName>new-value</en:TagName>@sg'FileName.xml" 

這是我在我的xml文件中添加的,它由shell腳本解析。

<cmd>perl -pi -0777 -e '[email protected]<en:TagName>.*?</en:TagName>@<en:TagName>new-value</en:TagName>@sg'FileName.xml</cmd> 

這裏我的python腳本將<en:TagName>作爲標記,並且無法解析它。所以我加了"perl -pi -0777 -e 's#&lt;en:TagName&gt;.*?&lt;en:TagName&gt;#&lt;en:tagName&gt;new-value&lt;/en:TagName&gt;#sg' FileName.xml",並且還使用了「#」作爲分隔符(因爲@是我們使用的shell腳本中的特殊字符)

Putting#無法提供期望的結果。而不是取而代之的是在最後添加新的價值。

+3

你可以嘗試把perl的命令'CDATA'標籤。 CDATA標籤內的任何內容都被xml解析器忽略 – RobEarl

+0

@RobEarl:是CDATA標籤起作用。謝謝!! – user1914896

回答

4

CDATA標籤環繞你的Perl命令:

Some text, like JavaScript code, contains a lot of "<" or "&" characters. To avoid errors script code can be defined as CDATA. 

Everything inside a CDATA section is ignored by the parser. 

A CDATA section starts with "<![CDATA[" and ends with "]]>" 
+2

+1這是正確的方法(但如果嵌入的xml包含CDATA塊呢?) –