2012-03-21 5 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ファイル私ののcontrolerで

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

ビューで、「イベント/ eventlistxml.php:しかし、私は次のエラーを取得します'

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

これが原因URLパターンにXML に= NP & TPL = SP11 のcgi-binに/ phts.sh/X/xbevwindex.p?xtren = 1234 & xmlacは、このエラーを解決するための任意の方法はありますか?

ご利用いただきありがとうございます。

+1

行番号:67のファイル – safarov

+0

はevents.phpの67行です。 – Magic

答えて

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の構造を検証する必要があります。 あなたのPHPコードの先頭に

error_reporting(E_ALL); 

どこかを追加することができます。これにより、PHPインタープリタの警告と通知がすべて生成されるため、何が間違っているかを理解するのに役立ちます。

+0

Thans heximalですが、「XMLの解析に失敗しました」というエラーが表示されます。 上記のコードは、すべてのレコードのexpect ** URL **を表示します。 子サブを削除するとエラーが表示されなくなります。 – npcoda

+0

私は何が起こっているのを見ます。スラッシュ記号は予約されたXMLシンボルであるため、エスケープする必要があります。そのため、構文解析はかなりの理由で失敗します。次のようにURL値を指定してください。cgi-bin \ /phts.sh \/x \ /xbevwindex.p?xtren = 1234 & xmlac = np & tpl = sp11 – heximal

関連する問題