2016-06-10 3 views
2
mit

I XML-Array konvertieren müssen, aber es ist nichtXML Array simplexml_load_string

hier Umwandlung ist mein Code

<?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); 

Aber wenn ich

<soap:Body> 

aus dem XML entfernen es funktioniert gut, Was ist das Problem, wie es zu resole

+0

Mögliche Duplikat [Parse XML mit Namespace mit SimpleXML] (http://stackoverflow.com/questions/ 595946/parse-xml-with-namespace-using-simplexml) – CBroe

+0

Leider ist SimpleXML nicht mehr einfach, wenn Namespaces betroffen sind. Es ist möglich, dass Sie den 'json_encode ($ xml)' Trick einfach nicht verwenden können. Brauchen Sie wirklich generische Lösungen für jede XML-Definition? –

+0

@AlvaroGonzalez Gibt es Alternativen? –

Antwort

1

Versuchen Sie etwas ähnliches Lösung von diesem question.

In Ihrem Fall versuchen, diesen Code

<?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); 

Und Ausgang wird sein:

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

     ) 

) 
Verwandte Themen