ハマっている「お菓子」を教えて!

XMLファイルを配列としてとってこれる
XML_unserializeというライブラリを使用して
XMLファイルに含まれるデータをとってPHPで利用することが
できたのですが、ここで一つ大きな問題が発生しました。

XML_unserializeをつかうと

<XMLTAG>
 取り出したいデータ
</XMLTAG>

     ↓

array(
 [XMLTAG] = 取り出したいデータ
)

と、たしかに取り出したいデータを配列に変換することができます。
しかし、取り出したいデータの中にタグが含まれていた場合
例えば
<XMLTAG>
 <div>取り出したいデータ</div>
</XMLTAG>
とかになっていると
<div>もXMLと判断されてしまって
必要なデータがうまくとってこれないのです。
正規表現でエスケープさせるにしても数が膨大ですし、
XMLタグ名に実際にHTMLで使われている
タグ名が使われているとも限りません。
どうすれば、
”XMLの中に入っているHTML等のタグを含むデータ”をうまくとってくることが
できるのでしょうか?

A 回答 (1件)

「取り出したいデータ」がどのタグ(要素)にあるのか事前にわからないなら、シリアライズしてして配列にいれてしまうと、正規表現でサーチするしかないですね。


サーチする必要があるなら、XML本来の利点を生かすためにもXMLのまま扱ってDOM XML関数とか、SimpleXML関数を使うか、XMLパーサー関数で、
要素のハンドラー関数を用意して必要なデータを探します。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
さらに、いろいろ調べた結果

$match = "/(<)(((?![A-Z\/\?])|\/(?![A-Z]))[^\/^>]*)(\/?>)/e";
$replace = "'&lt;\\2&gt;'";
$XMLSRC = preg_replace($match, $replace, $XMLSRC);

という正規表現で取り除けることが分かりました。
XMLが
<Xml>、<Image>等と、要素名の一文字目が
大文字のアルファベットで書かれていれば
それを利用して、XMLかどうか判別するというものです。
当然抽出文字列の中に<Div>とかはいってたら
それも、対象になってしまうので苦肉の策もいいところですが
とりあえず、これでいってみます。

が、外部からとろうとするデータに不定期にタグが入っていたりすると
データの取得に不具合が生じるというのは
どう考えても、使いにくいので、何か対策はあるのでしょう。
そもそも、XMLで出力されるデータに
タグを含ませるという設計自体がナンセンスなのかもしれません。

お礼日時:2008/11/07 17:20

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