繁体   English   中英

遍历PHP中的XML文件

[英]Iterating over an XML file in PHP

我正在使用Laravel解析XML文件并将其存储到数据库中。 现在,这可能是我无法忍受的愚蠢错误,但是如果有人可以检查代码和得到的奇怪结果,我将非常感谢。

XML具有深刻而复杂的结构,以下是困扰我的一小部分:

在此处输入图片说明

最后,我将转储$ 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);

    }

现在,我最终看到的是:

在此处输入图片说明

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

可能是非常简单的调整。 只需在循环内重置$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;    
}

移动

$objekat = new stdClass();

$objekat_sp = new stdClass();

各自的foreach循环中。

现在,您正在将同一对象(修改其属性后)多次推入数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM