我正在使用REST构建一个Web服务。当客户端发送请求时,服务器将响应作为XML字符串发回,如下所示。
<?xml version="1.0" encoding="utf-8"?>
<xml>
<item>
<user>1</user>
<name>cym</name>
<house_number>23423423</house_number>
<house_number_addition>sfsfsdf</house_number_addition>
<zipcode>erwer</zipcode>
<city>werwer</city>
<street>ertyu</street>
<state_name>state1</state_name>
<countryName>Albania</countryName>
</item>
</xml>
我如何将XML响应解析为像这样的php数组?
$arr['list']=array(name=>'abc',age=>'23',gender=>'male');
或
$arr=array(name=>'abc',age=>'23',gender=>'male');
如果这不可能,那我怎样才能获得属性的值。我使用simplexml_load_string尝试了这个,但它返回null。这是我的代码
$response= $ex->getResponse();
$xmldat=simplexml_load_string($response);
$i= $xmldat->name;
答案 0 :(得分:0)
SimpleXML允许您作为对象与XML进行交互,但它要求您指定每一代,从根元素开始,但不包括根元素(在您的情况下,<xml/>
)。
尝试:
$i = $xmldat->list->name;
这将返回SimpleXMLElement类型的对象,但如果你需要它,可以很容易地转换为字符串。
答案 1 :(得分:0)
有很多方法可以做到这一点
将其转换为数组
$xml = json_decode(json_encode((array) $xmldat), 1);
echo $xml['item']['name']; // according to your XML, u should use `item` first then the element
OR
$response= $ex->getResponse();
$xmldat=simplexml_load_string($response);
$i= $xmldat->item->name;
答案 2 :(得分:0)
很少有问题,XML未经过验证。以下工作,您应该能够从那里构建。
$xmldat = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<xml>
<item>
<user>1</user>
<name>cym</name>
<house_number>23423423</house_number>
<house_number_addition>sfsfsdf</house_number_addition>
<zipcode>erwer</zipcode>
<city>werwer</city>
<street>ertyu</street>
<state_name>state1</state_name>
<countryName>Albania</countryName>
</item>
</xml>
XML;
$xml = simplexml_load_string($xmldat);
print_r($xml);
echo $xml->item->name;