解決済みの質問
XMLデータを取得するプログラムをPHP5で製作しています。
以下、コーディング
-----------------------------------------------------------
$contents = file_get_contents($restURL);
$parser = xml_parser_create('UTF-8');
xml_parse_into_struct($parser,$contents,$values);
xml_parser_free($parser);
-----------------------------------------------------------
file_get_contentsでXMLデータの取得した時点では、例えば
<img><![CDATA[<hogehoge>]]></img>
というふうにCDATAが格納されていることは確認できています。
しかし、xml_parse_into_structで配列構造体にXMLデータを格納すると、
[0] => Array
(
[tag] => IMG
[type] => complete
[level] => 4
[value] =>
)
という感じに、"value"の中の値が空になってしまいます。
xml_parse_into_structで"CDATA"が消えずに配列構造体される方法、
または、xml_parse_into_struct以外で"CDATA"が消えずに配列構造体に
設定される手法はありますでしょうか。
投稿日時 - 2008-09-26 15:49:23
いや、(XMLの)認識のされかたとしては合ってる筈だよ。
ただ、その文字列を残したいというなら「XMLとしての規則」を守って「エスケープ」するなりしなきゃならないよ
具体的には不等号を実態参照化だね
そうじゃない場合は
2段変換しかないね。
1度テキストとして取り込んでcdataを何かしらに(プログラム上で一定の規則を持つなにかしらの文字列に)置換し、それをxmlとしてパース
投稿日時 - 2008-09-26 16:49:04
お礼
取り出したいのはCDATAの中身なので、CDATAを削除し、
マークアップ文字を実態参照化した上でパースすると、
うまく取り出すことができました。
とてもよいヒントをありがとうございました。
投稿日時 - 2008-09-27 10:55:05
0人が「このQ&Aが役に立った」と投票しています