みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

このQ&Aは役に立ちましたか?

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

回答(1)

あなたにオススメの質問