在PHP中将XML转换为数组以调用Soap API

在PHP中将XML转换为数组以调用Soap API,php,xml,soap,Php,Xml,Soap,我有一个从PHP代码调用的Soap API。我无法将其转换为数组。我也在Stackoverflow和google上搜索了很多问题,但都不够有用 我在将以下内容转换为数组时遇到问题 <objects> <ABCnxtObj> xsi:type="api:Lead" xmlns:xsi="http://www.w3.org/2001/XMLSch

我有一个从PHP代码调用的Soap API。我无法将其转换为数组。我也在Stackoverflow和google上搜索了很多问题,但都不够有用

我在将以下内容转换为数组时遇到问题

            <objects>
              <ABCnxtObj> 
                   xsi:type="api:Lead" 
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <Key>702144</Key>
                <Custom>
                  <BusinessName>9<BusinessName>
                  </Custom>
               </ABCnxtObj>
            </objects>
这里的问题是我无法放置xsi:type&xmlns:xsi属性。谁能解释一下,我如何在数组中传递这些值

或者如果有其他方法可以做到这一点


谢谢

以此为例:

$data = '<objects>
            <ABCnxtObj xsi:type="api:Lead" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <Key>702144</Key>
                <Custom>
                  <BusinessName>9</BusinessName>
                </Custom>
            </ABCnxtObj>
        </objects>';


$xml = simplexml_load_string($data);
$namespaces = $xml->getNamespaces(1);

$array = [];

foreach ($xml AS $obj => $val) {

    foreach ($namespaces AS $ns => $nsv) {
        $array[$obj]['namespaces'][$ns] = $nsv;

        foreach ($xml->$obj->attributes($ns, 1) AS $name => $value) {
            $array[$obj]['attributes'][$ns.':'.$name] = (string) $value[0];
        }
    }
    $array[$obj]['object'] = $val;
}

var_dump($array);
$data='1!'
702144
9
';
$xml=simplexml\u load\u字符串($data);
$namespaces=$xml->getNamespaces(1);
$array=[];
foreach($xml作为$obj=>$val){
foreach($ns=>$nsv的名称空间){
$array[$obj]['namespaces'][$ns]=$nsv;
foreach($xml->$obj->attributes($ns,1)AS$name=>$value){
$array[$obj]['attributes'][$ns.:'.$name]=(字符串)$value[0];
}
}
$array[$obj]['object']=$val;
}
变量转储($数组);

属性
xmlns:xsi
是一个名称空间定义,您可以使用simplexmlement对象的
getNamespaces
方法读取它。当您知道哪些名称空间可以出现在XML中时,您可以读取所有名称空间下的属性-这发生在内部foreach循环中:遍历所有名称空间并读取当前名称空间中的所有属性。

有什么理由不直接创建XML吗?实际上,问题是,我在soapis方面确实做得不多。所以,这里我有一个API,我必须首先登录到它。Login方法采用我在Login函数中作为数组('username'=>'**','password'=>'**')传递的用户名和密码。它工作得很好。然后在响应中我得到一个userContext,其中包含Token&它的有效性现在我有一个Save()函数来调用API。Save方法将usercontext作为第一个参数,第二个参数是一个长xml(这是Lead信息)。您能帮助我如何用XML实现这一点吗?
$data = '<objects>
            <ABCnxtObj xsi:type="api:Lead" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                <Key>702144</Key>
                <Custom>
                  <BusinessName>9</BusinessName>
                </Custom>
            </ABCnxtObj>
        </objects>';


$xml = simplexml_load_string($data);
$namespaces = $xml->getNamespaces(1);

$array = [];

foreach ($xml AS $obj => $val) {

    foreach ($namespaces AS $ns => $nsv) {
        $array[$obj]['namespaces'][$ns] = $nsv;

        foreach ($xml->$obj->attributes($ns, 1) AS $name => $value) {
            $array[$obj]['attributes'][$ns.':'.$name] = (string) $value[0];
        }
    }
    $array[$obj]['object'] = $val;
}

var_dump($array);