2012-03-21 45 views
1

我試圖從XML文件顯示記錄。但我得到以下錯誤:PHP-XML:試圖獲取非對象的屬性

A PHP Error was encountered Severity: Notice Message: Trying to get property of non-object Filename: controllers/events.php Line Number: 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> 

在我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; 
} 

視圖「事件/ eventlistxml.php '

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

這是由於URL模式在XML 的cgi-bin/phts.sh/X/xbevwindex.p?xtren = 1234 & xmlac = NP & TPL = SP11 有沒有解決這個錯誤的方法?

謝謝你的支持。

+1

WHere是行號:67上的文件 – safarov 2012-03-21 08:19:43

+0

哪行67個events.php? – Magic 2012-03-21 08:26:46

回答

1

我建議檢查DOMDocument-> 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解釋器的所有警告和通知,因此可以幫助您瞭解哪些問題是錯誤的。

+0

Thans十進制但它顯示錯誤「無法解析XML」。 上面的代碼顯示所有記錄期望** URL **。 當我刪除子子錯誤消失。 – npcoda 2012-03-21 09:52:57

+0

我明白髮生了什麼事。您需要轉義斜線符號,因爲它是保留的XML符號,所以解析失敗是出於公平的原因。嘗試以這種方式指定URL值:cgi-bin \ /phts.sh \/x \ /xbevwindex.p?xtren=1234 & xmlac = np & tpl = sp11 – heximal 2012-03-21 10:36:48

相關問題