simplexml_load_stringを使ってCDATAで囲まれたデータを扱う時には「LIBXML_NOCDATA」を指定。他にも「LIBXMLパラメーター」を積極的に使うといい感じでした

取得するデータにも依るんですけど「file_get_contents」を使って読み込んだデータをオブジェクトに代入する時には、私は「simplexml_load_string」をよく使っています。それで、たまにデータが「CDATA」で囲まれている場合があります。

こんな感じで、CDATAで囲まれてる

<Content><![CDATA[取得したデータ]]></Content>

そんな時は「LIBXML_NOCDATA」を指定すると、いい感じで取得できます。

LIBXML_NOCDATA (integer)
CDATA をテキストノードとしてマージ

(引用:PHP: 定義済み定数 – Manual

早速やってみましょう~。書き方は、こんな感じです。

サンプル

$xml = file_get_contents('読み込むファイルなど');

simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA);

やっていること

変数「$xml」に「file_get_contents」を使って読み込んだデータを格納。「simplexml_load_string」引数を指定。第1引数に変数「$xml」、第2引数に「SimpleXMLElement」、第3引数に「LIBXML_NOCDATA」を指定。

第3引数に指定できる値はほかにもあります。「PHP: 定義済み定数 – Manual」に一覧がありますので、ご参考ください。これは知っておいてよかったです。

第2引数「class_name」について

このオプションのパラメータを使用して、 simplexml_load_file() が指定されたクラスのオブジェクトを返すようにします。 このクラスは、SimpleXMLElement クラスを継承していなければなりません。

(引用:PHP: simplexml_load_string – Manual

第2引数「class_name」は「SimpleXMLElement」を継承するクラス名を指定します。自作した「SimpleXMLElement」を継承させたクラス名でもOK。特別な使い方をしないのであれば、通常は「SimpleXMLElement」で大丈夫だと思います。

参考リンク

simplexml_load_file」も読むと、大変勉強になります。

PHP: file_get_contents – Manual

PHP: simplexml_load_string – Manual

PHP: simplexml_load_file – Manual

PHP: SimpleXMLElement – Manual

PHP: 定義済み定数 – Manual

著者:bouya Imamura