【问题标题】:Converting XML to array in PHP to call Soap API在 PHP 中将 XML 转换为数组以调用 Soap API
【发布时间】:2019-10-31 17:04:09
【问题描述】:

我有一个可以从 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>

我将其转换为以下数组:

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

这里的问题是我无法放置 xsi:type & xmlns:xsi 属性。谁能解释我如何在我的数组中传递这些值。

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

谢谢!

【问题讨论】:

  • 有什么理由不直接创建 XML 吗?
  • 实际上,问题是我真的没有在 SOAP API 上做太多工作。所以,在这里我有一个 API,我必须先登录它。 Login 方法采用我在登录函数中作为数组('username'=>'**', 'password'=>'****') 传递的用户名和密码。它工作得很好。然后在响应中我得到一个 userContext,其中包含 Token 及其有效性现在我有一个 Save() 函数来调用 API。 Save 方法将用户上下文作为第一个参数,第二个参数是一个长 xml(即 Lead 信息)。你能帮我看看如何用 XML 完成这个吗?

标签: php xml soap


【解决方案1】:

以此为例:

$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 循环中:遍历所有名称空间并读取当前名称空间中的所有属性。

【讨论】:

    猜你喜欢
    • 2017-06-24
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2015-09-03
    • 2016-10-03
    相关资源
    最近更新 更多