繁体   English   中英

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

[英]Converting XML to array in PHP to call Soap API

我有一个Soap API,可以从PHP代码中调用。 我在将其转换为数组时遇到麻烦。 我也在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>

我将其转换为以下数组:

$objects = [
        'ABCnxtObj' => [
            'Key' => 702144,
            'Custom' => [
                'BusinessName' => 9
            ]
        ]
    ];

这里的问题是我无法放置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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM