SoapClient:将NS添加到XML节点

时间:2013-08-19 16:27:06

标签: php soap xml-namespaces

我需要通过SoapClient发送一个复杂的xml。

我试图通过发送带有请求的一系列参数来以“正确”的方式进行。

以下是我当前数组的示例:

$params = array("TestRequest" => array("NodeOne" => "Value1", "NodeTwo" => "Value2"));

它像这样制作一个xml:

<TestRequest>
   <NodeOne>Value1</NodeOne>
   <NodeTwo>Value2</NodeTwo>
</TestRequest>

但是,我需要将NS添加到“TestRequest”部分。它需要看起来像这样:

<ord:TestRequest>
   <NodeOne>Value1</NodeOne>
   <NodeTwo>Value2</NodeTwo>
</ord:TestRequest>

我已经把我的头发拉出来尝试我能想到的一切,搜索谷歌和堆栈无济于事。是的,我尝试过数组输入,“ord:TestRequest”。

如果有人是PHP的SoapClient大师并且可以提供帮助,我将永远感恩。

1 个答案:

答案 0 :(得分:0)

好的,经过多次头痛......实现这一目标的最简单方法不是我喜欢的方式。

我最终手动编写了这样的XML:

$xml = '<ord:TestRequest>
   <NodeOne>Value1</NodeOne>
   <NodeTwo>Value2</NodeTwo>
</ord:TestRequest>';

PHP:

 $dom =new DOMDocument('1.0');
try {
    $dom->loadXML($xml);
    $request = $dom->saveXML();
    $this->xml = $request;
    return true;
} catch (DOMException $e) {
    $this->xml = $xml;
    $this->errors++;
    $this->error_msg = 'Error generating XML :' . $e;
        }

我的XML的结构就像它应该制作SoapRequest一样,然后我使用了SoapClient __doRequest()方法。

重要的是,当你走这条路线时,你不能像使用wsdl一样自动生成xml,所以请确保在你的soap连接中并请求你的wsdl为null。