XML到阵列使用simplexml_load_string

问题描述:

我需要将XML转换为阵,但其未进行转换XML到阵列使用simplexml_load_string

这里是我的代码

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

但是,如果我从XML删除

<soap:Body> 

它工作正常,如何解决它的问题是什么

+0

的[解析与使用SimpleXML命名空间XML]可能的复制(http://stackoverflow.com/questions/ 595946/parse-xml-with-namespace-using-simplexml) – CBroe

+0

不幸的是,当涉及命名空间时,SimpleXML不再简单。有可能你不能使用'json_encode($ xml)'技巧。您是否真的需要针对任何XML定义的通用解决方案? –

+0

@AlvaroGonzalez有没有其他可用的替代品? –

尝试类似解决方案从这个question

你的情况,试试这个代码

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

     ) 

)