アプリ版:「スタンプのみでお礼する」機能のリリースについて

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"が消えずに配列構造体に
設定される手法はありますでしょうか。

A 回答 (1件)

いや、(XMLの)認識のされかたとしては合ってる筈だよ。


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

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

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

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

お礼日時:2008/09/27 10:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!