<?php
/**
这是第一段XML
<?xml version="1.0" encoding="utf8"?>
<list>
<item>
<name>Hamm</name>
<site>Hamm.cn</site>
</item>
<item>
<name>Hamm</name>
<site>Hamm.cn</site>
</item>
</list>
**/
/**
这是第二段XML
<?xml version="1.0" encoding="utf8"?>
<list>
<item>
<name>Hamm</name>
<site>Hamm.cn</site>
</item>
</list>
**/
//上面有两段XML,是item项目分别为1个和2个数组元素的XML包体
//我们遇到的问题是,当XML中数组元素为1时,我们按下面的代码解析
//得到的数据,并不是一个数组,而是一个对象
$obj = simplexml_load_string($xmlstring);
$arr = json_decode(json_encode($obj));
$list = $arr->item;
print_r(json_encode($list));
//第一个XML输出
//[{"name":"Hamm","site":"Hamm.cn"},{"name":"Hamm","site":"Hamm.cn"}]
//第二个XML输出
//{"name":"Hamm","site":"Hamm.cn"}
//上面的区别很容易看到 XML中单个元素并不被认为是只有一个元素的数组
//而是直接给解析成了一个对象
//那么,如何正确的解析一个XML中的数组呢?下面的代码可以试试
$obj = simplexml_load_string($xmlstring);
$arr = json_decode(json_encode($obj));
$list = $arr->item;
$arrList = [];
if(is_array($list)){
foreach($list as $item){
array_push($arrList,$item);
}
}else{
$item = $list;
array_push($arrList,$item);
}
print_r(json_encode($arrList));
//这样 第一个XML输出
//[{"name":"Hamm","site":"Hamm.cn"},{"name":"Hamm","site":"Hamm.cn"}]
//同时 第二个XML输出
//[{"name":"Hamm","site":"Hamm.cn"}]
//到此为止,我们可以这么解析来满足一个统一的数据结构了。
//这个坑今天在转的时候发现了,这里记录一下。