在php中读取两级xml

时间:2014-05-13 18:44:32

标签: php xml

我有xml文件,如:

<DATA>
    <DATAITEM>
        <id>0001</id>
        <name>Chair</name>
        <price>400</price>
    </DATAITEM>
    <DATAITEM>
        <id>0002</id>
        <name>Table</name>
        <price>1200</price>
    </DATAITEM>
</DATA>

我有这个PHP脚本:

while($row = mysql_fetch_array($result)){
    foreach($xml_file->DATA as $xml){
        $value = htmlspecialchars($xml->DATAITEM->id);
    }
}

问题是,在循环的每一步中,在变量值中只保存了xml文件的第一项。这是合乎逻辑的,因为只有xml文件的第一项具有以DATA开头的路径而第二项没有。但我不知道如何将xml文件的第二项保存到变量$ value中。我希望你能理解我的问题。

1 个答案:

答案 0 :(得分:0)

以下是与您的代码类似的工作示例

$xml = "<DATA>
    <DATAITEM>
        <id>0001</id>
        <name>Chair</name>
        <price>400</price>
    </DATAITEM>
    <DATAITEM>
        <id>0002</id>
        <name>Table</name>
        <price>1200</price>
    </DATAITEM>
</DATA>";

$x = new SimpleXMLElement($xml);

foreach ($x->DATAITEM as $item) {
  $value = $item->id;
}

正如Quixrick在评论中指出的那样,每次循环迭代时都会覆盖$ value变量。您可以创建一个数组并将id值存储为该数组中的元素:

$value = array();
foreach ($x->DATAITEM as $item) {
  $value[] = $item->id;
}
// do something with $value, an array containing all of the id values