2012-06-13 28 views
10

Tôi phải gọi một dịch vụ web SOAP bằng cách sử dụng một đối tượng SoapClient. Một trong những thông số có chứa một số XML bao gồm trong một phần CDATA, như thế này:Tôi có thể tạo SoapVar chứa CDATA bằng XML bằng cách nào?

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

Lưu ý không gian tên nút, đó là nguồn gốc của nỗi đau của tôi ...

Nếu tôi tạo ra một chuỗi SoapVar, XML được mã hóa ...

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> 

Vì vậy, tôi không thể làm theo cách này. Lựa chọn duy nhất tôi đã tìm thấy là sử dụng mã hóa XSD_ANYXML, như thế này:

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

Nó hoạt động, nhưng nó xấu ... Nhìn vào shortcut cứng mã hoá không gian tên ("ns2").

Vì vậy, bạn có ý tưởng tạo một phần CDATA chứa XML không?

Trả lời

1

Tôi đã có yêu cầu tương tự (dịch vụ web của nhà cung cấp được thiết kế riêng yêu cầu nhúng một phần của yêu cầu dưới dạng XML được mã hóa trong một chuỗi, và nó sẽ phát sinh nếu bạn cung cấp cho nó chuỗi được mã hóa thực thể thay vì CDATA).

Với khả năng tốt nhất của tôi để xác định, giải pháp SoapVar của bạn cũng tốt như vậy. Lấy làm tiếc. Tôi khá không hài lòng về việc phải hardcode một tài liệu tham khảo không gian tên bản thân mình.

Các vấn đề liên quan