简单的PHP SimpleXML问题

时间:2010-10-12 16:50:11

标签: php simplexml

我有一个非常糟糕的脑块。

我的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.

但水果列表没有存储到数组中。我做错了什么?

非常感谢。

4 个答案:

答案 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)