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>
它工作正常,如何解决它的问题是什么
答
尝试类似解决方案从这个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
)
)
)
的[解析与使用SimpleXML命名空间XML]可能的复制(http://stackoverflow.com/questions/ 595946/parse-xml-with-namespace-using-simplexml) – CBroe
不幸的是,当涉及命名空间时,SimpleXML不再简单。有可能你不能使用'json_encode($ xml)'技巧。您是否真的需要针对任何XML定义的通用解决方案? –
@AlvaroGonzalez有没有其他可用的替代品? –