从 soap 负载中删除额外的 xml 声明
removing extra xml declaration from the soap payload
产品供应商使用语法不正确的 soap 消息调用我的 Web 服务。原因是 soap 消息在携带销售数据的有效负载之前有一个冗余的 xml 声明。该接口应该传输超过 500K transactions/day。在不显着影响性能的情况下,我有哪些选择可以取消第二个 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>
没有符合标准的 XML 或 XSL 工具会处理您的示例 SOAP 消息,因为它格式错误:文件中只能有一个 XML 声明,如果有声明, 它必须是文件中的第一件事——甚至空格都不能出现在它之前。
我由此推断您的 SOAP 消息不是由兼容的 XML 或 XSL 工具发出的。
此时我的建议是做以下两件事之一:
- 联系供应商并说明他们的工具发出无效 XML,必须解决这个问题。
实施您自己的过程以去除不需要的 XML 声明。这样做时,您 不能 使用 XSL 来处理整个消息——您最好使用基于文本的搜索和替换工具。例如,您可以使用以下正则表达式查找有问题的声明,将其替换为 </code> 将删除它,同时保留其他内容:</p>
<pre><code>(>\s+)<\?xml [^>]+>
产品供应商使用语法不正确的 soap 消息调用我的 Web 服务。原因是 soap 消息在携带销售数据的有效负载之前有一个冗余的 xml 声明。该接口应该传输超过 500K transactions/day。在不显着影响性能的情况下,我有哪些选择可以取消第二个 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>
没有符合标准的 XML 或 XSL 工具会处理您的示例 SOAP 消息,因为它格式错误:文件中只能有一个 XML 声明,如果有声明, 它必须是文件中的第一件事——甚至空格都不能出现在它之前。
我由此推断您的 SOAP 消息不是由兼容的 XML 或 XSL 工具发出的。
此时我的建议是做以下两件事之一:
- 联系供应商并说明他们的工具发出无效 XML,必须解决这个问题。
实施您自己的过程以去除不需要的 XML 声明。这样做时,您 不能 使用 XSL 来处理整个消息——您最好使用基于文本的搜索和替换工具。例如,您可以使用以下正则表达式查找有问题的声明,将其替换为
</code> 将删除它,同时保留其他内容:</p> <pre><code>(>\s+)<\?xml [^>]+>