我想将文档中单个命名空间声明的双引号更改为单引号,同时将所有其他命名空间声明保留为双引号。我怎样才能做到这一点?
这是来自服务器的响应文档:
<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><InquiryResponse xmlns="http://www.openuri.org/"><Header><HeaderAttr1>abcd</HeaderAttr1><HeaderAttr2>xxx</HeaderAttr2><HeaderAttr3>string</HeaderAttr3></Header><Body><InquiryResult><ResultItem1>theresulttext</ResultItem1><ResultItem2>abcd</ResultItem2><ResultItem3>0</ResultItem3></InquiryResult></Body></InquiryResponse></soapenv:Body></soapenv:Envelope>
我需要类似的东西(注意 open:InquiryResponse 没有“)。
<?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <open:InquiryResponse xmlns:open='http://www.openuri.org/'><open:Header><open:HeaderAttr1>abcd</open:HeaderAttr1><open:HeaderAttr2>xxx</open:HeaderAttr2><open:HeaderAttr3>string</open:HeaderAttr3></open:Header><open:Body><open:InquiryResult><open:ResultItem1>theresulttext</open:ResultItem1><open:ResultItem2>abcd</open:ResultItem2><open:ResultItem3>0</open:ResultItem3></open:InquiryResult></open:Body></open:InquiryResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
我已经能够进行命名空间前缀更改、附加命名空间声明、空白修正、字符集更改,我现在只需要更改这两个字节。
我正在使用 Spring WS + Woodstox + Axiom 构建一个简单的查询 Web 服务。它是现有服务的替代品,我想让它逐字节相同($$ 原因)。我可以将 XML 转换为相同的类型,但目前我们不知道哪些消费者使用 grep 或正则表达式来查找数据。
到目前为止,我正在尝试使用 XSLT 和 PayloadTransformingInterceptor 来解决这个问题。我也会对其他选项感兴趣。