XML для массива, используя simplexml_load_string

Мне нужно конвертировать XML в массив, но это не конвертация

вот мой код

<?php
$response='<?xml version="1.0" encoding="utf-8"?>
 <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

<soap:Body>
<Search xmlns="http:url">
  <Request>
    <aaa>string</aaa>
    <bbb>string</bbb>
    <ccc>srting</ccc>
    <SourceName>string</SourceName>

  </Request>
</Search>
</soap:Body>
</soap:Envelope>';


function xml2Array($xmlstring)
{
    $xml = simplexml_load_string($xmlstring, "SimpleXMLElement", LIBXML_NOCDATA);
    $json = json_encode($xml);
    return json_decode($json,TRUE);
}
$arr = xml2Array($response);
print_r($arr); 

Но если я удалю

<soap:Body> 

из XML все работает нормально, в чем проблема как его решить

 vellai durai10 июн. 2016 г., 19:15
@AlvaroGonzalez Есть ли альтернативный вариант?
 Álvaro González10 июн. 2016 г., 14:53
К сожалению, SimpleXML больше не является простым, когда задействованы пространства имен. Вполне возможно, что вы просто не можете использоватьjson_encode($xml) трюк. Вам действительно нужно общее решение для любого определения XML?
 CBroe10 июн. 2016 г., 14:50

Ответы на вопрос(1)

Решение Вопроса

Попробуйте что-то похожее на решение из этоговопрос.

В вашем случае попробуйте этот код

<?php
$response='<?xml version="1.0" encoding="utf-8"?>
 <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

<soap:Body>
<Search xmlns="http:url">
  <Request>
    <aaa>string</aaa>
    <bbb>string</bbb>
    <ccc>srting</ccc>
    <SourceName>string</SourceName>

  </Request>
</Search>
</soap:Body>
</soap:Envelope>';


function xml2Array($xmlstring)
{
    $xml = simplexml_load_string($xmlstring, "SimpleXMLElement", LIBXML_NOCDATA, "http://schemas.xmlsoap.org/soap/envelope/");
    $xml->registerXPathNamespace('soap-env', 'http://schemas.xmlsoap.org/soap/envelope/');
    $bodies = $xml->xpath('//soap-env:Body');
    if (is_array($bodies) && !empty($bodies[0])) {
        $json = json_encode($bodies[0]);
        return json_decode($json,TRUE);
    } else {
        return false;
    }
}
$arr = xml2Array($response);
print_r($arr);

И вывод будет:

Array
(
    [Search] => Array
        (
            [Request] => Array
                (
                    [aaa] => string
                    [bbb] => string
                    [ccc] => srting
                    [SourceName] => string
                )

        )

)

Ваш ответ на вопрос