2011-10-24 32 views
1

我目前正在研究一個需要對XML文件的部分進行HTML編碼的簡短SED腳本。該腳本目前看起來是這樣的:SED - XML文件中特定標記之間的HTML編碼

sed.exe "/<messageData>/,/<\/messageData>/ {/<messageData>/b;/<\/messageData>/b; s/</\&lt;/g; s/>/\&gt;/g; }" %1 >%2 

所以基本上,更換所有<和>與<和>,在和標籤之間。

這個腳本工作得很好用漂亮的印刷XML,即

<?xml version="1.0" encoding="ISO-8859-1"?> 
<Messages> 
    <messageData> 
     <test>DATA</test> 
    </messageData> 
</Messages> 

出來作爲

<?xml version="1.0" encoding="ISO-8859-1"?> 
<Messages> 
    <messageData> 
     &lt;test&gt;DATA&lt;/test&gt; 
    </messageData> 
</Messages> 

這正是我需要的。我的問題是,我需要過程的文件是不是漂亮的印刷,一切都是單行線,就像這樣:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<Messages><messageData><test>DATA</test></messageData></Messages> 

而與此格式,腳本不再工作。 是否可以修改我的腳本以使用兩種格式?

請注意,我不能影響輸出格式,並且SED是要使用的腳本引擎。

我想我可以創建另一個SED腳本,在文件中的每個>之後插入換行符,然後運行我現在創建的腳本。不過,我猜測這不會是非常有效的性能(每個文件兩遍)。

有什麼建議嗎?

問候 丹尼爾

+0

你在這裏的研究是什麼告訴你關於sed和xml的內容?祝你好運。 – shellter

+0

就像我在原帖中所說的那樣,使用SED或不使用SED並不是我的選擇。 – Daniel

+0

@Daniel,然後告訴誰做出選擇。通常使用sed或regexps來處理XML是一個非常糟糕的主意。爲什麼存在特定於XML的工具是有原因的。 – svick

回答

1

萬一有人發生跌倒在同一個問題,這就是我們如何解決它。我知道這不太好,只有在我們能夠使用更好的解決方案之前,我們才能做到。

sed.exe -i "s/\(>\)\(<\)/\1\n\2/g" %1 
sed.exe "/<messageData>/,/<\/messageData>/ {/<messageData>/b;/<\/messageData>/b; s/</\&lt;/g; s/>/\&gt;/g; }" %1 >%2 
+0

sed從來不漂亮,但我一直都在使用它;-)。如果你關心處理時間,你應該能夠將兩個sed連接在一起,以減少每個文件的時間。最後,你可以接受你自己的答案,並獲得一些額外的代表點。祝你好運。 – shellter

+0

乾杯,不知道我可以接受我自己的答案 – Daniel

相關問題