10

SoapClient オブジェクトを使用して SOAP Web サービスを呼び出す必要があります。パラメータの 1 つは、次のように CDATA セクションに含まれる XML を含む必要があります。

<ns2:productInformation><![CDATA[<foo><bar>baz</bar></foo>]]></ns2:productInformation>

ノードの名前空間に注意してください。それが私の痛みの原因です...

string を作成するSoapVarと、XML がエンコードされます...

new SoapVar('<![CDATA[<foo><bar>baz</bar></foo>]]>', XSD_STRING, null, null, 'productInformation', self::MY_NAMESPACE)

<ns2:productInformation xsi:type="xsd:string">&lt;![CDATA[&lt;foo&t;&lt;bar&gt;baz&lt;/bar&gt;&lt;/foo&gt;]]&gt;</ns2:productInformation>

だから私はこのようにすることはできません。私が見つけた唯一の代替手段はXSD_ANYXML、次のようにエンコーディングを使用することです。

new SoapVar('<ns2:productInformation><![CDATA[<foo><bar>baz</bar></foo>]]></ns2:productInformation>', XSD_ANYXML)

動作しますが、悪いです... ハードコードされた名前空間のショートカット (「ns2」) を見てください。

XML を含む CDATA セクションを作成するアイデアはありますか?

4

1 に答える 1

1

私は同じ要件を持っていました (要求の一部を文字列にエンコードされた XML として埋め込む必要があり、CDATA の代わりにエンティティでエンコードされた文字列を指定すると爆発する、設計が不適切なベンダー Web サービス)。

私が判断できるSoapVar限り、あなたの回避策は最高です。ごめん。名前空間参照を自分でハードコーディングしなければならないことに、かなり不満を持っています。

于 2012-07-08T18:34:12.223 に答える