4

SimpleXMLElementPHPでRSSフィードをインポートしています。タイトルと説明で困っています。何らかの理由で、フィードを取得した Web サイトでは、タイトルと説明が次のように表示され<![CDATA[...]]>ます。

<item>
<title><![CDATA[...title...]]></title>
<link>...url...</link>
<description><![CDATA[...title...]]></description>
<pubDate>...date...</pubDate>
<guid>...link...</guid>
</item>

var_dump()SimpleXMLElementを実行すると、(この部分で) 次のようになります。

  [2]=>
  object(SimpleXMLElement)#5 (5) {
    ["title"]=>
    object(SimpleXMLElement)#18 (0) {
    }
    ["link"]=>
    string(95) "...link..."
    ["description"]=>
    object(SimpleXMLElement)#19 (0) {
    }
    ["pubDate"]=>
    string(31) "...date..."
    ["guid"]=>
    string(48) "...link..."
  }

フィードからタイトルと説明を読み取るための値を取得するにはどうすればよいですか? <![CDATA[...]]>

4

1 に答える 1

15

SimpleXML は CDATA ノードを問題なく読み取ります。あなたが抱えている唯一の問題は、print_rvar_dump、および同様の関数が SimpleXML オブジェクトの正確な表現を提供しないことです。それらは PHP で完全に実装されていないためです。

実行echo $myNode->descriptionすると、CDATA セクションの内容が正常に表示されます。その理由は、SimpleXMLElement を文字列に変換するように要求すると、すべてのテキストと CDATA コンテンツが自動的に結合されますが、結合されるまでは区別が記憶されているためです。

一般的なケースとして、SimpleXML の任意の要素または属性の文字列コンテンツを抽出するには、 を使用して文字列にキャストします(string)$myNode。これにより、関数が文字列を予期していたときにオブジェクトを取得することについて不平を言ったり、セッションに保存するときにシリアル化に失敗したりするなど、他の問題も防止されます。

https://stackoverflow.com/a/13830559/157957にある以前の回答も参照してください。

于 2013-05-30T17:28:59.953 に答える