Gre*_*ire 10 php soap soap-client
我必须使用SoapClient对象调用SOAP Web服务.其中一个参数必须包含CDATA部分中包含的一些XML,如下所示:
<ns2:productInformation><![CDATA[<foo><bar>baz</bar></foo>]]></ns2:productInformation>
Run Code Online (Sandbox Code Playgroud)
注意节点命名空间,这是我痛苦的根源......
如果我创建一个字符串SoapVar,则XML被编码...
new SoapVar('<![CDATA[<foo><bar>baz</bar></foo>]]>', XSD_STRING, null, null, 'productInformation', self::MY_NAMESPACE)
<ns2:productInformation xsi:type="xsd:string"><![CDATA[<foo&t;<bar>baz</bar></foo>]]></ns2:productInformation>
Run Code Online (Sandbox Code Playgroud)
所以我不能这样做.我发现的唯一替代方法是使用XSD_ANYXML编码,如下所示:
new SoapVar('<ns2:productInformation><![CDATA[<foo><bar>baz</bar></foo>]]></ns2:productInformation>', XSD_ANYXML)
Run Code Online (Sandbox Code Playgroud)
它工作,但它很糟糕......看看硬编码的命名空间快捷方式("ns2").
那么你有想法创建一个包含XML的CDATA部分吗?
我也有同样的要求(设计不当的供应商 Web 服务需要将请求的一部分嵌入为 XML 编码的字符串中,如果您为其提供实体编码的字符串而不是 CDATA,则会导致崩溃)。
据我所知,您的SoapVar解决方法已经是最好的了。对不起。我对自己必须对命名空间引用进行硬编码感到非常不满。