新しく質問する

PHP ”XML_unserialize”でXMLを配列に変換したのですが・・・

役に立った:0件
  • 質問者:yuzuru0024
  • 投稿日時:2008/11/07 16:05
  • 困り度:暇なときに回答をください

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

XML_unserializeをつかうと

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

     ↓

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

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

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:0件)
  • 参考になった:0件

No.1ベストアンサー20pt

  • 回答者:yyr446
  • 回答日時:2008/11/07 16:37

「取り出したいデータ」がどのタグ(要素)にあるのか事前にわからないなら、シリアライズしてして配列にいれてしまうと、正規表現でサーチするしかないですね。
サーチする必要があるなら、XML本来の利点を生かすためにもXMLのまま扱ってDOM XML関数とか、SimpleXML関数を使うか、XMLパーサー関数で、
要素のハンドラー関数を用意して必要なデータを探します。

通報する

この回答へのお礼

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

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

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

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

  
このQ&Aは役に立ちましたか?(役に立った:0件)

このページのトップへ