简体   繁体   中英

PHP-XML : Trying to get property of non-object

I was trying to display record from XML file. But I get following error:

A PHP Error was encountered Severity: Notice Message: Trying to get property of non-object Filename: controllers/events.php Line Number: 67

xml file

<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>

In my controler '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;
}

In view 'events/eventlistxml.php'

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

This is due to url pattern in xml cgi-bin/phts.sh/x/xbevwindex.p?xtren=1234&xmlac=np&tpl=sp11 Is there any method to resolve this error?

Thank you for your kind support.

I would recommend to check if DOMDocument->load method returns TRUE first. Maybe your XML file is invalid in DOMDocument's perspective. Try to add this:

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

Anyway, such verification is a good manner. If it really returns FALSE, you should validate the structure of your XML. You may add

error_reporting(E_ALL);

somewhere in the beginning of your php code. This will generate all warnings and notices of PHP-interpreter, so it may be helpful in understaning what's wrong.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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