所以我試圖在Perl中將XML文件讀入一個字符串中,並將其作爲SOAP消息的一部分發送。我知道這是不理想的,因爲有SOAP發送文件的方法,但是,我僅限於使用已設置的SOAP,並且它沒有設置爲使用文件支持進行發送。Perl正則表達式[] for <>
因此,我需要解析出標記標記<>並將其替換爲[]。做這個的最好方式是什麼?
所以我試圖在Perl中將XML文件讀入一個字符串中,並將其作爲SOAP消息的一部分發送。我知道這是不理想的,因爲有SOAP發送文件的方法,但是,我僅限於使用已設置的SOAP,並且它沒有設置爲使用文件支持進行發送。Perl正則表達式[] for <>
因此,我需要解析出標記標記<>並將其替換爲[]。做這個的最好方式是什麼?
這實際工作,但是它並沒有解決我越來越想送我的SOAP消息的問題的一部分。不過謝謝。 – 2010-06-11 20:35:05
如果僅僅通過[
和>
更換<
通過]
工作不適合你(也許是因爲尖括號的地方,你不希望替換顯示在CDATA節上),那麼你可能不會有太大從中牟利正則表達式在這裏。正則表達式不適合匹配XML等非常規語言。
你可能會逃脫搜索<([^>]+)>
和更換與[$1]
:
$subject =~ s/<([^>]+)>/[$1]/g;
怎麼樣用Base64代替?
不會有人想起小海豹嗎?
正如其他人已經指出,無論是在回答和評論,與正則表達式這樣將原因,只要您的數據變得足夠複雜的問題,爲包括[
/]
或<
/>
字符。一旦發生這種情況,任何簡單的正則表達式都會中斷,並且您需要將磁帶重新組合在一起,希望在再次打破之前它會徘徊一段時間,或者用真正的XML解析器和/或更好的方式重新實現它SOAP實現。
OTOH,leonbloy對Base64編碼數據的建議實際上是一個很好的建議。我沒有想到這一點,它應該像一個正確的SOAP實現一樣工作,但要注意發送的數據會更大,如果需要進行線級調試,可能會更難以解釋內容。
如果原始的xml文件裏面有'['或']'怎麼辦? – leonbloy 2010-06-11 20:25:33
或'<' and '>'作爲cdata的一部分? – 2010-06-11 20:26:54
或>作爲常規數據,這並不需要進行轉義 – mirod 2010-06-13 07:39:49