PHP-XML:尝试获取非对象的属性

时间:2012-03-21 08:15:45

标签: php xml

我试图从XML文件中显示记录。但我得到以下错误:

  

遇到PHP错误严重性:注意   消息:尝试获取非对象的属性   文件名:controllers / events.php行号:67

xml文件

<events>   
  <event>
    <date>15/06/11</date>
    <venue>Parijs - Frankfort</venue>
    <name>SuperRunner 2011</name>
    <url>cgi-bin/phts.sh/x/xbevwindex.p?xtren=1234&amp;xmlac=np&amp;tpl=sp11</url>
  </event>
  . . . 
  . . . 
</events>

在我的控制器'events.php'

function index(){
   $data['events'] = $this->readXMLFile();        
   $data['title'] = "Latest Events";
   $this->load->view('events/eventlistxml',$data);
}

function readXMLFile(){
        $doc = new DOMDocument();
        $doc->load('events.xml');

        $events = $doc->getElementsByTagName("event");
        $data= array();
        foreach($events as $key=>$event):             
            $dates = $event->getElementsByTagName("date");
            $data[$key]['date'] = $dates->item(0)->nodeValue;

            $venues = $event->getElementsByTagName("venue");
            $data[$key]['venue'] = $venues->item(0)->nodeValue;

            $names = $event->getElementsByTagName("name");
            $data[$key]['name'] = $names->item(0)->nodeValue;

            $names = $event->getElementsByTagName("url");
            $data[$key]['url'] = $names->item(0)->nodeValue;
        endforeach;  
        return $data;
}

视图'events / eventlistxml.php'

<?php                                     
 foreach($events as $key=>$val):                              
       echo $val['date']."<br />";
       echo $val['venue']."<br />";
       echo $val['url']."<br />";
       endforeach;
 ?> 

这是由于xml cgi-bin / phts.sh / x / xbevwindex.p中的url模式?xtren = 1234&amp; xmlac = np&amp; tpl = sp11 有没有解决此错误的方法?

感谢您的支持。

1 个答案:

答案 0 :(得分:1)

我建议先检查DOMDocument-&gt; load方法是否返回TRUE。也许你的XML文件在DOMDocument的角度来看是无效的。 尝试添加:

function readXMLFile(){
  $doc = new DOMDocument();
  $res = $doc->load('events.xml');
  if (!$res) {
    echo("Failed to parse XML\n");
    return false
  }
...

无论如何,这种验证是一种很好的方式。 如果它确实返回FALSE,那么您应该验证XML的结构。 你可以添加

error_reporting(E_ALL);

在PHP代码的开头某处。这将生成PHP解释器的所有警告和通知,因此它可能有助于理解错误。