Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-在SoapClient的信封中使用多个XMLN_Php_Xml_Soap_Namespaces_Soap Client - Fatal编程技术网

PHP-在SoapClient的信封中使用多个XMLN

PHP-在SoapClient的信封中使用多个XMLN,php,xml,soap,namespaces,soap-client,Php,Xml,Soap,Namespaces,Soap Client,我正在尝试在SOAP调用信封中使用多个xmlns名称空间进行SOAP调用,但我不知道如何正确地进行调用 以下是我现在掌握的代码: $soapClient = new SoapClient(WSDL_URL, array( "trace" => true, "exceptions" => true )); $soapClient->__setLocation(WSDL_LOCATION); $request = '

我正在尝试在SOAP调用信封中使用多个xmlns名称空间进行SOAP调用,但我不知道如何正确地进行调用

以下是我现在掌握的代码:

$soapClient = new SoapClient(WSDL_URL, array(
            "trace" => true,
            "exceptions" => true
        ));
$soapClient->__setLocation(WSDL_LOCATION);

$request = '
        <ns1:someNodeName xmlns="http://some.webservice.url.com">
            <ns2:someOtherNodeName>
                // [REQUEST DETAILS]
            </ns2:someOtherNodeName>
        </ns1:someNodeName>
    ';

$params = new SoapVar($request, XSD_ANYXML);

try {
    $results = $soapClient->someFunctionName($params);
    return $results;
}
catch (Exception $e) {
    $error_xml =  $soapClient->__getLastRequest();
    echo $error_xml . "\n";
    echo $e->getMessage() . "\n";
}
$soapClient=新的soapClient(WSDL\u URL,数组(
“trace”=>true,
“异常”=>true
));
$soapClient->\uuuuSetLocation(WSDL\uLocation);
$request='1
//[申请详情]
';
$params=newsoapvar($request,XSD_ANYXML);
试一试{
$results=$soapClient->someFunctionName($params);
返回$results;
}
捕获(例外$e){
$error\u xml=$soapClient->\uu getLastRequest();
echo$error\u xml。“\n”;
echo$e->getMessage()。“\n”;
}
这段代码为我提供了一个XML请求,如下所示:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://some.webservice.url.com">
    <SOAP-ENV:Body>
        <ns1:someNodeName xmlns="http://some.webservice.url.com">
            <ns2:someOtherNodeName>
                // [REQUEST DETAILS]
            </ns2:someOtherNodeName>
        </ns1:someNodeName>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

//[申请详情]
我试图改变的是信封行,得到如下内容:

<SOAP-ENV:Envelope 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:ns1="http://some.webservice.url.com" 
    xmlns:ns2="http://some.other.webservice.url.com"
>


请问有什么方法可以实现这一点吗?

XMLNS属性是名称空间定义,如果在该名称空间中添加节点,则会添加这些属性。它们不需要位于根元素上,而是位于使用它的元素或其祖先之一上

$request = '
    <ns1:someNodeName 
       xmlns:ns1="http://some.webservice.url.com"                 
       xmlns:ns2="http://some.other.webservice.url.com">
        <ns2:someOtherNodeName>
            // [REQUEST DETAILS]
        </ns2:someOtherNodeName>
    </ns1:someNodeName>
';
输出:

<ns1:someNodeName xmlns:ns1="http://some.webservice.url.com">
  <ns2:someOtherNodeName xmlns:ns2="http://some.other.webservice.url.com">
    <!--[REQUEST DETAILS]-->
  </ns2:someOtherNodeName>
</ns1:someNodeName>

非常感谢。工作得很有魅力!
<ns1:someNodeName xmlns:ns1="http://some.webservice.url.com">
  <ns2:someOtherNodeName xmlns:ns2="http://some.other.webservice.url.com">
    <!--[REQUEST DETAILS]-->
  </ns2:someOtherNodeName>
</ns1:someNodeName>