所以我试图将一个XML文件读入Perl中的字符串并将其作为SOAP消息的一部分发送。我知道这不是理想的,因为有SOAP方法可以发送文件,但是,我只能使用已设置的SOAP,并且它没有设置为带文件支持的发送。
因此我需要解析标记标记<>并用[]替换它们。这样做的最佳方式是什么?
答案 0 :(得分:3)
如果简单地将<
替换为[
而将>
替换为]
对您不起作用(可能是因为尖端括号出现在某个地方的CDATA部分中不想替换,那么你可能不会从这里的正则表达中获利。正则表达式不适合匹配XML等非常规语言。
您可能会搜索<([^>]+)>
并将其替换为[$1]
:
$subject =~ s/<([^>]+)>/[$1]/g;
答案 1 :(得分:2)
答案 2 :(得分:2)
如果使用Base64呢?
答案 3 :(得分:1)
请问有人不会想到海豹?
正如其他人已经指出的那样,在答案和评论中,只要您的数据变得足够复杂以包含[
/ {,使用正则表达式执行此操作就会导致问题{1}}或]
/ <
个字符。一旦发生这种情况,任何简单的正则表达式都会破坏,你需要将它重新绑定在一起,希望它能在再次打破之前跛行一段时间或者用真正的XML解析器和/或更好的方法重新实现它SOAP实现。
OTOH,leonbloy建议使用base64编码你的数据实际上是一个非常好的建议。我没有想到这一点,它应该与正确的SOAP实现一样好,但需要注意的是发送的数据会更大,如果你需要进行线级调试,可能会更难解释内容。