ドキュメント内の単一の名前空間宣言の二重引用符を単一引用符に変更し、他のすべての名前空間宣言を二重引用符のままにしたいと考えています。これどうやってするの?
サーバーからの応答ドキュメントは次のとおりです。
<?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 には ' not " があることに注意してください) のようなものが必要です。
<?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>
名前空間プレフィックスの変更、追加の名前空間宣言、空白の修正、文字セットの変更を行うことができました。必要なのは、これらの 2 バイトを変更することだけです。
Spring WS + Woodstox + Axiom を使用して、単純な照会 Web サービスを構築しています。これは既存のサービスの代替であり、バイトごとに同一にしたいと考えています ($$ の理由)。XML を同一の型にすることはできますが、この時点では、データを検索するためにどのコンシューマーが grep または regex を使用しているかはわかりません。
これまでのところ、XSLT と PayloadTransformingInterceptor を使用してこの問題に対処しようとしています。他のオプションにも興味があります。