2009-08-07 12 views
5

私は解決方法を理解できないという小さな問題があります。 PHPを解析しようとしているXML(実際にはRSSです)ファイルがありますが、CDATAタグは空白です。PHPでXML CDATAを解析する

はここXMLコード だとここPHP file

すべてはdescriptionタグが印刷されないことを除いて、正常に動作します。 私はある人が助けることができれば非常に感謝します。ただ、好奇心のうち

+1

また、XMLデータの解析を担当するコードの部分を投稿することはできますか?おそらくバグはコードにあり、データにはありません^^ –

+2

まだXMLとPHPコードはありますか? Pastebinがあなたのエントリーを削除しました。あなたがそれらを持っている場合は、質問を編集して戻すことができます(ペーストビンに戻さず、代わりに質問テキストに入れてください)。できなければ、質問は削除されます。ありがとう。 –

+0

不明なペーストID! – GoodSp33d

答えて

16

、あなたのXML (私はプロセスでそれを破壊didnt't願っています - 私はそれを修正するためにOPを編集できる場合、私は表示されます)取得した後、

  • をあなたは説明を文字列にキャストしましたか?

    $xml = simplexml_load_string($str); 
    foreach ($xml->channel->item as $item) { 
        var_dump($item->description); 
    } 
    

    しかし、それだけで、あなたにそれを得るだろう:その素敵ではありません

    object(SimpleXMLElement)[5] 
    object(SimpleXMLElement)[3] 
    

    ...


は、私は何を意味することは、これを使用することができています


このようにデータを文字列にキャストする必要があります。

$xml = simplexml_load_string($str); 
foreach ($xml->channel->item as $item) { 
    var_dump((string)$item->description); 
} 

そして、あなたは記述を取得:

うーん... ELSE


(もしXMLがインデントされた場合、ところで、有用であることが分かるかもしれないそれらのtrimを使用)

string ' 

This is one of the content that I need printed on the screen, but nothing is happening. Please, please...output something... <br /><br /> <b>Showing</b>: 2 weeks<br /> <b>Starting On</b>: August 7, 2009 <br /> <b>Posted On</b>: August 7, 2009 <br /> 
<a href="http://www.mysite.com">click to view</a> 
      ' (length=329) 

string ' 

Another content...This is another of the content that I need printed on the screen, but nothing is happening. Please, please...output something... <br /><br /> <b>Showing</b>: 2 weeks<br /> Starting On: August 7, 2009 <br /> <b>Posted On</b>: August 7, 2009 
; 
       ' (length=303) 

、あなたのPHPコードが必要になるでしょう(少なくとも、descriptionタグ;-)にどのようになっているかを知るには便利でしょう再フォーマットXML用)


EDIT

ありがとう!

私はペーストビンに行く場合は、あなたの本当のXMLデータ内の1つのことを持っている場合は、ページの下部にあるテキストエリアに、ホワイトスペースが<?xml version="1.0" encoding="utf-8"?>

前に、XMLの先頭にあり、それは問題の原因になります:それは有効なXMlではありません(XML宣言はXMLデータにというものが最初にでなければなりません)。
あなたはこのようなエラーが出ます:

Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : XML declaration allowed only at the start of the document 

は、あなたはそれを確認することができますか?
問題がここにある場合は、error_reportingdisplay_errors ;-)を有効にする必要があります。PHPファイルを見て取った後


EDIT:

$item_desc = $x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue; 

説明は任意のchildNodeが含まれていません:

あなたのforループ、あなたがあなたの記述データを取得するためにこれをやっているに、私は言うだろう。それはnodeValueを直接使うのはどうですか?
このように:

$item_desc = $x->item($i)->getElementsByTagName('description')->item(0)->nodeValue; 

それは追記として

:-)この方法をよりよく動作しているようだ、あなたはおそらく他のタグのために同じことを行うことができ、私は考えます。たとえば、これも機能しているようです:

$item_title=$x->item($i)->getElementsByTagName('title')->item(0)->nodeValue; 
$item_link=$x->item($i)->getElementsByTagName('link')->item(0)->nodeValue; 

これは何を提供していますか?


別の編集:こことは、私はおそらく使用するコードです:

$xmlDoc = new DOMDocument(); 
$xmlDoc->loadXML($str);   // I changed that because I have the XML data in a string 

//get elements from "<channel>" 
$channel = $xmlDoc->getElementsByTagName('channel')->item(0); 
$channel_title = $channel->getElementsByTagName('title')->item(0)->nodeValue; 
$channel_link = $channel->getElementsByTagName('link')->item(0)->nodeValue; 
$channel_desc = $channel->getElementsByTagName('description')->item(0)->nodeValue; 

//output elements from "<channel>" 
echo "<p><a href='" . $channel_link . "'>" . $channel_title . "</a>"; 
echo "<br />"; 
echo $channel_desc . "</p>"; 

//get and output "<item>" elements 
$x = $xmlDoc->getElementsByTagName('item'); 
for ($i=0 ; $i<=1 ; $i++) { 
    $item_title = $x->item($i)->getElementsByTagName('title')->item(0)->nodeValue; 
    $item_link = $x->item($i)->getElementsByTagName('link')->item(0)->nodeValue; 
    $item_desc = $x->item($i)->getElementsByTagName('description')->item(0)->nodeValue; 
    echo ("<p><a href='" . $item_link 
    . "'>" . $item_title . "</a>"); 
    echo ("<br />"); 
    echo ($item_desc . "</p>"); 
    echo' <p />'; 
} 

注私は、文字列内のXMLデータを持っている、と私はURLからそれをフェッチする必要はありません、だから私はloadではなくloadXMLメソッドを使用しています。

大きな違いは、私がいくつかのchildNodesアクセスを削除したことです。これは必要ではないと感じています。
これはあなたには見えますか?

+0

空白はありません...私はあなたの側からだと思います。 XML宣言は最初の行にあります。 –

+0

おそらくPastebinに問題があるかもしれません。私はそれを削除したので、今すぐOKです。私はあなたの答えをかなり数回編集しました(XMLを与えた後、PHPコードを与えた後、もう一度 "最終"解決策をとる)。より多くの情報を提供する。お役に立てれば ! –

+0

ありがとうございました。あなたの助けにパスカルが、あなたは$ strをどこでロードしましたか? 'loadXML($ str)? コードを変更して文字列を読み込む方法を教えてください。 –