18:00CDATAfile_get_contentslibxmlNameSpaceRSSsimplexml_load_filesimplexml_load_string名前空間TweetPocket名前空間やCDATAの読み込みPHPでRSS取得するのに、単純にsimplexml_load_file()を利用して取得しようと思った時に、名前空間(「:」コロンで区切られた要素)やCDATAの値が取得できないのでメモ。CDATAに関して言えば、取得自体はできているけど、パッと見取れていないように見えるのでちょっと工夫が必要。]]></category></item>このファイルを読み込んでみます。取得できない$i++;}これだけだと、dc:creatorとcategoryが取得できません。CDATAの取得を考えるCDATAの取得方法を考えてみました。CDATA取得方法その1:simplexml_load_file()のパラメータを設定するsimplexml_load_file()でLIBXML_NOCDATAを第3引数に渡すことで取得できます。取得できた!$i++;}libxmlはPHPのXML操作ライブラリで、その中の定義済み定数にLIBXML_NOCDATAの説明があります。他の定数も存在するので、XMLの操作をする上で一度は見ておいたほうが良いかと。CDATA取得方法その2:CDATA要素を(string)でキャストするCDATA要素に対して文字列として扱うように、(string)でキャストすると取得できます。取得できた!$i++;}CDATA要素の数が沢山あると大変なので、「その1」のやり方がスマートのように思えます。名前空間要素の取得を考える次に名前空間要素の取得方法を考えてみました。children()メソッドで指定すると取得できます。取得できた!$i++;}名前空間要素の取得方法その2:記事の要素をまるごと配列に保存これが一番やりたかった事。RSSの要素をWordPress側でカスタマイズする必要があったので、CDATAも名前空間の要素もどういうのが来るか不明なので、まるごと配列にえいやー!と保存したい。何も考えずにまるごと保存してみました。$item;}CDATAはLIBXML_NOCDATA指定により取得できました。名前空間が......となったので、一度RSS情報を文字列として取得して、名前空間要素を文字列変換しパースするという方法で解決しました。以下の2点に注意すること。simplexml_load_file関数はphp.iniの設定でallow_url_fopenをOnにしていないと使えない。Offの場合は、curl_get_contents()でRSS情報を取得してから、simplexml_load_string()でパースし直す。「株式会社まなびと」の代表取締役はじめました。宮崎県で活動するフロントエンドエンジニア。フロントエンド業の傍らWordPressのプラグイン開発や公式テーマレビュー、Webマーケティングやプログラミング教室の講師などのいろいろなお仕事をしてます。JSerでPHPer。