我有一个非常糟糕的脑块。
我的XML文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<fruits>
<item>Apple</item>
<item>Orange</item>
<item>Banana</item>
</fruits>
<vegetables>
<item>Lettuce</item>
<item>Carrot</item>
</vegetables>
</data>
我想使用SimpleXML来检索包含“Apple,Orange,Banana”的数组。我使用的代码如下:
$xml=simplexml_load_file('food.xml');
foreach($xml as $fruits=>$item) {
$foodlist[] = $item;
}
print_r($foodlist); // Should display list of fruits.
但水果列表没有存储到数组中。我做错了什么?
非常感谢。
答案 0 :(得分:1)
我已经测试了你的代码。这对我来说可以。
另一件事 - 可能是你描述错了,或者你可能理解错了。 $ foodlist应该包含SimpleXML元素对象的数组(在您的情况下为“<fruits>
”和“<vegetables>
”),而不是数组。如果您只想获得成果,请访问$xml->fruits->item;
。
编辑: 如果你想建立一系列水果,试试这个:
$array = (array)$xml->fruits;
print_r($array['item']); // Should dipslay list of fruits
//or this
foreach ($xml->fruits->item as $fruit){
$array2[] = (string) $fruit; //typecast to string, because $fruit is xml element object.
}
print_r($array2); // Should dipslay list of fruits
答案 1 :(得分:1)
这个怎么样:
foreach($xml->fruits->item as $item) {
//$item has to be cast to a string otherwise it will be a SimpleXML element
$foodlist[] = (string) $item;
}
print_r($foodlist);
我认为这应该可以提供您正在寻找的内容,一个包含水果节点子节点的每个项目节点的文本值的数组。
答案 2 :(得分:0)
尝试foreach( $xml['data'] as $fruits=>$item )
----编辑----
foreach( $xml as $fruits => $item ) {
if( $fruits == "fruits" )
$foodlist[] = $item;
}
答案 3 :(得分:0)