Преобразование XML в массив в PHP для вызова Soap API - PullRequest
2 голосов
/ 18 июня 2019

У меня есть 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. Может кто-нибудь объяснить мне, как я могу передать эти значения в моем массиве.

Или, если есть другой способ сделать это.

Спасибо!

1 Ответ

0 голосов
/ 18 июня 2019

Используйте это как пример:

$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 - это определение пространства имен, его можно прочитать с помощью метода getNamespaces объекта SimpleXMLElement.Когда вы знаете, какие пространства имен могут появляться в вашем XML, вы можете читать атрибуты во всех пространствах имен - это происходит во внутреннем цикле foreach: проходить по всем пространствам имен и читать все атрибуты в текущем пространстве имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...