【问题标题】:SoapClient: Add NS to XML nodeSoapClient:将 NS 添加到 XML 节点
【发布时间】:2013-08-19 16:27:05
【问题描述】:

我需要通过 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 专家并且可以提供帮助,我将永远感激不尽。

【问题讨论】:

    标签: php soap xml-namespaces


    【解决方案1】:

    好吧,在头疼之后……最简单的方法不是我想要的。

    我最终像这样手动编写了一个 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,因为您已经这样做了,因此请确保在您的肥皂连接中并请求您的 wsdl 为空。

    【讨论】:

    • 重要提示:我省略了完整的 xml,如果您使用它来参考相同的问题,请访问 php.net 上的 SoapClient::__doRequest() 以了解如何构建整个类
    猜你喜欢
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    相关资源
    最近更新 更多