从soap有效负载中删除额外的xml声明

时间:2017-07-19 21:55:52

标签: xml xslt soap version

产品供应商使用soap消息调用我的Web服务,该消息在语法方面不正确。原因是soap消息在携带销售数据的有效负载之前有一个冗余的xml声明。该接口应该每天传输超过500K的交易。在不显着降低性能的情况下,我可以选择剥离第二个xml声明吗? 我不能应用类似下面的内容,因为在这种情况下xml声明不在开头。除了xml语法不正确。

<xsl:output method="xml" omit-xml-declaration="yes" />

肥皂消息

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:postTransaction xmlns:ns2="http://v1.ws.abc.dtv/">
<rawLogString>
   <?xml version="1.0" encoding="UTF-8"?> <!--unwanted xml declaration-->
   <Log><!--elements that carry sale data-->
   </Log>
</rawLogString>
</ns2:postTransaction>
</S:Body>
</S:Envelope>

1 个答案:

答案 0 :(得分:1)

没有符合标准的XML或XSL工具会处理您的示例SOAP消息,因为它格式不正确:文件中只能有一个XML声明,如果有声明,它必须是第一件事。文件 - 甚至没有空格可以在它之前。

我从中推断出您的SOAP消息不是由兼容的XML或XSL工具发出的。

我现在的建议是做两件事之一:

  1. 与供应商联系并说明他们的工具发出无效的XML,并且必须修复此问题。
  2. 实现您自己的进程以去除不需要的XML声明。这样做时,你不能使用XSL来处理整个消息 - 你最好使用基于文本的搜索和替换工具。例如,您可以使用以下正则表达式来查找违规声明,并将其替换为$1将其删除,同时保留其他内容:

    (>\s+)<\?xml [^>]+>