xml_parse_into_structを使うと、xmlの中のCDATAが消える

解決済みの質問

xml_parse_into_structを使うと、xmlの中のCDATAが消える

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

QNo.4358114

すぐに回答ほしいです

質問者が選んだベストアンサー

いや、(XMLの)認識のされかたとしては合ってる筈だよ。
ただ、その文字列を残したいというなら「XMLとしての規則」を守って「エスケープ」するなりしなきゃならないよ
具体的には不等号を実態参照化だね

そうじゃない場合は
2段変換しかないね。
1度テキストとして取り込んでcdataを何かしらに(プログラム上で一定の規則を持つなにかしらの文字列に)置換し、それをxmlとしてパース

投稿日時 - 2008-09-26 16:49:04

お礼

取り出したいのはCDATAの中身なので、CDATAを削除し、
マークアップ文字を実態参照化した上でパースすると、
うまく取り出すことができました。

とてもよいヒントをありがとうございました。

投稿日時 - 2008-09-27 10:55:05

ANo.1

0人が「このQ&Aが役に立った」と投票しています

あわせてチェックしたい
  • XML ...
  • XML::Parser::Expat が無い? ...
  • xml_parse_into_structでなぜか0が返ります ...
PR
【回答募集中】花粉にひと言、物申す![ 詳細 ]

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら