我正在使用以下代码来解析以下xml,并将每个人的id添加为数组的键,并将它们的名称添加为数组的值。
代码正常工作,但数组不是。
$array = array();
$category = $xml->xpath('descendant::person');
foreach ($person as $p) {
$array[$p['id']] = $p['name'];
}
<?xml version="1.0" encoding="utf-8"?>
<people>
<person name="Joe" id="134">
<person name="Jack" id="267">
</person>
</person>
<person name="Ray" id="388">
<person name="John" id="485">
<person name="Rayan" id="900">
</person>
</person>
<person name="Alex" id="590">
</person>
</people>
XML无效但我无法使其有效。但是代码工作正常,我只需要将id和值分配给数组。
答案 0 :(得分:1)
我不知道这是正确的方法,但我已经测试过这个并且工作正常,
$xml = simplexml_load_string($response);
$category = $xml->xpath('descendant::person');
$array = array();
foreach($category as $each){
$name_obj = $each->attributes()->name[0];
$name_json = json_encode($name_obj);
$name_array = json_decode($name_json, TRUE);
$id_obj = $each->attributes()->id[0];
$id_json = json_encode($id_obj);
$id_array = json_decode($id_json, TRUE);
$array[$id_array[0]] = $name_array[0];
}
print_r($array);
答案 1 :(得分:1)
这里发生了很多小问题......但最大的问题是你不能将simplexml对象节点用作数组中的索引。它必须手动转换为字符串或整数。你也可以更好地调整你的xpath表达式,你的循环不应该是$ person,这是一个不存在的变量,而是$ category。试试这个替代方案:
$array = array();
$category = $xml->xpath('//person');
while(list( , $p) = each($category)) {
$array[(string)$p['id']] = (string)$p['name'];
}
print_r($array);
另请注意,如果您的XML不是有效的XML,那么它确实很重要... simplexml库永远不会在无效的XML上正常运行(示例中的XML有一些不正确的嵌套)。
答案 2 :(得分:-1)
你确定XML不应该是这样的吗?:
<?xml version="1.0" encoding="utf-8"?>
<people>
<person name="Joe" id="1"></person>
<person name="Jack" id="2"></person>
<person name="Ray" id="3"></person>
<person name="John" id="4"></person>
<person name="Alex" id="5"></person>
</people>