循环遍历simplexml_load_file结果

时间:2013-09-10 11:42:14

标签: php xml simplexml

我正在尝试使用simplexml_load_file将xml文件中的信息转换为变量。 xml文件的结构是:

<root>
    <item>
        <sku></sku>
        <weight></weight>
        <Price></Price>
        <media>
            <images></images>
            <images></images>
            <images></images>
        </media>
        <short_description>
            <![CDATA[]]>
        </short_description>
        <description>
            <![CDATA[]]>
        </description>
    </item>
    <item>
        <sku></sku>
        <weight></weight>
        <Price></Price>
        <media>
            <images></images>
            <images></images>
            <images></images>
        </media>
        <short_description>
            <![CDATA[]]>
        </short_description>
        <description>
            <![CDATA[]]>
        </description>
    </item>
</root>

这是我到目前为止所做的,但它只获得每个项目的第一张图片而不是所有图片。除此之外,似乎工作正常。

$xml_url="accessories.xml";
$xml = simplexml_load_file($xml_url);
foreach($xml->item as $_item){
    echo $_item->sku . " - ";
    echo $_item->weight . " - ";
    echo $_item->Price . " <br/>";
    //echo $_item->short_description . " <br/><br/>";
    foreach($_item->media as $_media){
        echo $_media->images . "<br/>";
    }
}

我的php和xml技能非常有限,所以我很感激你能给予的任何帮助 感谢

2 个答案:

答案 0 :(得分:1)

尝试以下循环:

foreach($_item->media->children() as $_img){
    echo $_img . "<br/>";
}

这样可以节省两次循环次数。

答案 1 :(得分:0)

您应该使用以下foreach

foreach($_item->media->images as $_media){
    echo $_media . "<br/>";
}

您会看到为什么使用以下转储的media数据:

var_dump($_item->media);

object(SimpleXMLElement)[5]
  public 'images' => 
    array (size=3)
      0 => string '1' (length=1)
      1 => string '2' (length=1)
      2 => string '3' (length=1)