2010-06-11 51 views
0

所以我試圖在Perl中將XML文件讀入一個字符串中,並將其作爲SOAP消息的一部分發送。我知道這是不理想的,因爲有SOAP發送文件的方法,但是,我僅限於使用已設置的SOAP,並且它沒有設置爲使用文件支持進行發送。Perl正則表達式[] for <>

因此,我需要解析出標記標記<>並將其替換爲[]。做這個的最好方式是什麼?

+3

如果原始的xml文件裏面有'['或']'怎麼辦? – leonbloy 2010-06-11 20:25:33

+3

或'<' and '>'作爲cdata的一部分? – 2010-06-11 20:26:54

+0

或>作爲常規數據,這並不需要進行轉義 – mirod 2010-06-13 07:39:49

回答

2

威爾簡單的東西像這樣的工作嗎?

$a=~y/<>/[]/; 

y執行一對一替換。 <變成[>變成]The perlop documentation更詳細地解釋它。

+1

這實際工作,但是它並沒有解決我越來越想送我的SOAP消息的問題的一部分。不過謝謝。 – 2010-06-11 20:35:05

3

如果僅僅通過[>更換<通過]工作不適合你(也許是因爲尖括號的地方,你不希望替換顯示在CDATA節上),那麼你可能不會有太大從中牟利正則表達式在這裏。正則表達式不適合匹配XML等非常規語言。

你可能會逃脫搜索<([^>]+)>和更換與[$1]

$subject =~ s/<([^>]+)>/[$1]/g; 
1

不會有人想起小海豹嗎?

正如其他人已經指出,無論是在回答和評論,與正則表達式這樣原因,只要您的數據變得足夠複雜的問題,爲包括[/]</>字符。一旦發生這種情況,任何簡單的正則表達式都會中斷,並且您需要將磁帶重新組合在一起,希望在再次打破之前它會徘徊一段時間,或者用真正的XML解析器和/或更好的方式重新實現它SOAP實現。

OTOH,leonbloy對Base64編碼數據的建議實際上是一個很好的建議。我沒有想到這一點,它應該像一個正確的SOAP實現一樣工作,但要注意發送的數據會更大,如果需要進行線級調試,可能會更難以解釋內容。