在PHP中迭代XML文件

时间:2015-08-22 09:11:07

标签: php xml

我使用Laravel解析XML文件并将其存储到数据库中。现在,这可能是我无法指责的某种愚蠢的错误,但我真的很感激,如果有人能检查代码和我得到的奇怪结果。

XML有一个深层而复杂的结构,这里有一点点我的烦恼:

enter image description here

我最后倾销$ nizXMLsp以查看对象数组中的内容:

public function upload(){

        $dom = new DomDocument();
        $nizBaza = DB::table('offers')->orderBy('id', 'DESC')->first();
        $nizXML = array();
        $objekat = new stdClass();
        $dom->load("storage/X_Lista.xml");
        $domXpath = new DomXPath($dom);
        $upit = $domXpath->query('//offer');
        foreach($upit as $of){
            $objekat->Time = $of->getAttribute('Time');
            $objekat->Date = $of->getAttribute('Date');
            $objekat->betRound = $of->getAttribute('betRound');
            $objekat->timestamp = $of->getAttribute('timestamp');
            array_push($nizXML, $objekat);
        }



        if(is_null($nizBaza) or $nizBaza->id != $nizXML[0]->betRound) {
            $kolo = new Offer();
            $kolo->id = $objekat->betRound;
            $kolo->ts = $objekat->Date . " " . $objekat->Time;
            $kolo->posix = $objekat->timestamp;
            $kolo->save();
            //
            $nizBaza = DB::table('sportovi')->get();
            $nizXMLsp = array(); $objekat_sp = new stdClass();
            foreach($dom->getElementsByTagName('sport') as $k=>$v){
                $objekat_sp->id = $v->getAttribute('id');
                $objekat_sp->name = $v->getAttribute('name');
                $objekat_sp->betRound = $v->parentNode->getAttribute('betRound');
                $nizXMLsp[$k] = $objekat_sp;
            }
        }
        elseif($nizBaza->id == $nizXML[0]->betRound){
            echo 'break1';
            exit;
        }
        else {
            echo 'break2';
            exit;
        }

        return var_dump($nizXMLsp);

    }

现在,我最终看到的是:

enter image description here

而不是4个具有不同数据集的对象,我得到4个具有相同数据集的对象(所有数据都来自最后一个节点)。它可能是什么?

2 个答案:

答案 0 :(得分:1)

可能是一个非常简单的调整。只需在循环中重置$objekat_sp

foreach($dom->getElementsByTagName('sport') as $k=>$v){
    $objekat_sp = "";   
    $objekat_sp->id = $v->getAttribute('id');
    $objekat_sp->name = $v->getAttribute('name');
    $objekat_sp->betRound = $v->parentNode->getAttribute('betRound');

    $nizXMLsp[$k] = $objekat_sp;    
}

答案 1 :(得分:0)

移动

$objekat = new stdClass();

$objekat_sp = new stdClass();

里面各自的foreach循环。

现在你正在将相同的对象(在修改其属性之后)多次推送到数组中。