我试图引导同事走向在SOAP消息中发送XML文档的最正确方式,但我并不是这方面的专家。看起来似乎应该可以使用CDATA部分解决,但默认的gSOAP序列化器是“帮助”#39;通过编码所有'<'和'>'。
例如,当我们尝试发送时:
<xml>
<tag>
<content>
<![CDATA[<xml><tag>Text!</tag></xml>]]>
</content>
</tag>
</xml>
实际发送的内容更像是:
<xml>
<tag>
<content>
<![CDATA[<xml><tag>Text!</tag></xml>]]>
</content>
</tag>
</xml>
如果接收器也是基于gSOAP的,我们可以透明地避开它,甚至不需要CDATA标记,但事实并非如此。接收器是一些PHP代码,所以使用html_entity_decode可能有效,但感觉不对(并且可能在所有情况下都不起作用?)。
我希望/期望解决方案是为字段指定不同的类型(当前&#39; xsd:string&#39;)以便使用dumber序列化程序,保留CDATA标记和其中的内容。
如果有一个简单而正确的解决方法(建议使用base64编码有效载荷),我想避免任何内部轮重新发明。
答案 0 :(得分:0)
序列化程序可能会将您的输入作为文本而不是XML ...所以只需将CDATA标记保留在文本之外,并让它使用字符引用而不是CDATA标记。</ p>
答案 1 :(得分:0)
我绝对建议反对使用CDATA来包装您的数据,即使它似乎是最方便的解决方案。
主要原因是CDATA应该表示字符数据,因为您的内容元素基本上是嵌套的XML(即数据),从技术上讲,它在这里使用是不正确的。
在这种情况下我会提出两种解决方案:
我意识到这可能不是你想要听到的,但是在实际理解其预期用途(https://www.w3.org/TR/REC-xml/#sec-cdata-sect)之前,我曾经处于相同的位置并且摸索着CDATA,我觉得以上两种选择是最佳方式。