Yahoo!知恵袋のAPIをさわっていて、レスポンスに含まれるCDATAがSimpleXMLで取得できてないことに気づきました。
APIを叩くために汎用の自前クラスを利用しているのですが、その中で
$res = @simplexml_load_string($xml); $res = @simplexml_load_file($url);
このように simplexml_load_string と simplexml_load_file を使っていたのですが、これではCDATAを無視してしまうようです。
リファレンスによると第3引数に追加のLibxmlパラメータを指定することができて、そのパラメータの一つである LIBXML_NOCDATA というオプションを指定すると、CDATAをテキストデータとして取得することができるようです。
» PHP: simplexml_load_file - Manual
» PHP: 定義済み定数 - Manual
なので、先のコードは次のように修正してあげました。
$res = @simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); $res = @simplexml_load_file($url, 'SimpleXMLElement', LIBXML_NOCDATA);
ちなみに第2引数は返されるオブジェクトのクラス名で、もしSimpleXMLElementクラスを継承したクラスを自作していればそのクラス名を指定できるらしいです。なので通常は 'SimpleXMLElement' を指定しておけば大丈夫です。
トラックバック
このエントリーのトラックバックURL:
この一覧は、次のエントリーを参照しています: SimpleXMLでCDATAを取得したいときはLIBXML_NOCDATAを使う:
» PHPのsimplexml_load_file(simplexml_load_string)はCDATAセクションを… from Do I like programming?
PHPのsimplexml_load_file(simplexml_load_string)はCDATAセクションを無視する…
そんなの知らねーよ\(^... [詳しくはこちら]
» Simple XML関数でCDATAセクションのテキストが取得できない from tech.ludicmind.net
という場合はオプションにLIBXML_NOCDATAを指定する。 via. Si... [詳しくはこちら]
前のエントリー: « マックベーカリーのメロンパンに失望した
次のエントリー: ブログ通信簿を使ってみると »
タイトル:
URL:
リンク用HTMLタグ:








