如何将含CDATA的完整XML编码后嵌入SOAP信封主体?
如何将包含CDATA的XML嵌入SOAP信封主体
别担心,我给你一步步拆解怎么完成这个操作:
第一步:处理原XML中的CDATA结束标记
因为要把整个带CDATA的XML放到SOAP主体的CDATA块里,直接嵌套会让解析器误判CDATA的结束位置,所以必须把原XML里的]]>转义成]]]]><![CDATA[>——解析器读取时会自动把这一串合并回原来的]]>,不会破坏原内容的结构。
比如你提供的示例片段里,<JobAction><![CDATA[Add]]></JobAction>转义后就变成<JobAction><![CDATA[Add]]]]><![CDATA[></JobAction>。
第二步:将处理后的XML放入SOAP信封
把转义完成的完整XML用<![CDATA[...]]>包裹,然后放到SOAP信封的<soap:Body>标签内部即可。
完整示例代码
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <![CDATA[ <?xml version="1.0" encoding="UTF-8"?> <Jobs> <Job> <JobAction><![CDATA[Add]]]]><![CDATA[></JobAction> <ATSJobID><![CDATA[ATSJOBid_SAMPLE123]]]]><![CDATA[></ATSJobID> <JobTitle><![CDATA[Senior Launch Commander]]]]><![CDATA[></JobTitle> <JobCity><![CDATA[Jacksonville]]]]><![CDATA[></JobCity> <!-- 补充你剩余的Job节点内容 --> </Job> </Jobs> ]]> </soap:Body> </soap:Envelope>
小提示
- 务必确保原XML里所有的
]]>都完成转义,否则SOAP解析器会直接报错。 - SOAP信封的命名空间要对应你的业务场景,上面用的是标准SOAP命名空间,如果有自定义要求记得替换。
内容的提问来源于stack exchange,提问作者Ben Esteban
相关产品推荐
相关产品推荐

