【发布时间】:2011-06-30 19:55:37
【问题描述】:
我想从消息中剥离 SOAP 信封以获取正文中的 XML。
我尝试了以下方法;
String strippedOfEnvelopedHeader = msg.replaceAll("(?s)(?i)<(.*):Envelope.*<\1:Body>", "");
我认为这会从像这样的消息中剔除 SOAP 信封,特别是标头;
<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>
<env:Header xmlns:env='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'/>
<soapenv:Body>
<myXML> stuff is here</myXML>
</soapenv:Body>
</soapenv:Envelope>
这应该导致;
<myXML> stuff is here</myXML>
</soapenv:Body>
</soapenv:Envelope>
但是,组反向引用似乎不起作用。
如果我同时替换捕获组和反向引用,则替换工作正常;
String strippedOfEnvelopeHeader = msg.replaceAll("(?i)(?s)<soapenv:Envelope.*<soapenv:Body>", "");
我想我可以猜到问题所在,捕获组贪婪并抓取了整个消息,因此匹配失败。
但解决方案却躲开了我。
有什么想法吗?
【问题讨论】:
-
argh 正则表达式来解析标记....我不知道肥皂,但它看起来像是 xml 本身?如果是这样,请使用 xml 解析器。