2017-07-19 66 views
0

产品供应商正在使用肥皂消息调用我的Web服务,该消息在语法方面不正确。原因是soap消息在载有销售数据的有效载荷之前有一个多余的xml声明。这个接口应该每天传输超过500K次交易。撕掉第二个xml声明时我有什么选择,而不会大幅度降低性能? 我不能应用下面的东西,因为在这种情况下,XML声明不是在开始。除了xml语法不正确。从soap有效负载中删除额外的xml声明

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

SOAP消息

<?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

不符合标准的XML或XSL工具将处理您的样本SOAP消息,因为它是畸形的:只能有文件中的一个XML声明,如果有是一个声明,它必须是文件中的第一件事 - 甚至连空白都不会出现在它之前。

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

我在这一点上的建议是做两件事情之一:

  1. 与供应商联系,并解释他们的工具发射无效的XML,而这必须是固定的。
  2. 执行您自己的过程以去除不需要的XML声明。当这样做时,不能使用XSL来处理整个消息 - 您最好使用基于文本的搜索和替换工具。例如,你可以使用下面的正则表达式来找到有问题的声明,并与$1代替它会删除它,同时保持其他内容:

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

差不多我的想法,但只是想之前确认我与大家伙吵架! – chemicalkt2