お勉強 :  PHPのSimpleXMLElementで悩む 

インフルエンザ明けで出社してみると、業務で使用している
複数のサーバーのうち1つだけPHPスクリプトで「一部だけ
画面表示が出ないよ?」という症状が発生していた。

いくつかあるサーバーのうち、使っているスクリプトは
同じ物なので、なんで動きが違うのかと考えていたら
新旧サーバーでPHPのバージョンが4系と5系で違い、
5系ではXMLをパースするのにSimpleXMLElementを
使用していた。

XMLをパースした際の結果を見てみると、文字列が入って
いてほしいオブジェクトの中には "comment" オブジェクトのみ。
なにこれ?と悩みつつ調べていると、どうやらXMLファイル
内の該当文字列に <!-- --> が含まれていて、
これが comment オブジェクトとして認識されていた様子。

なので、こんな感じだったから悪かった。
-------------------------------------------
$str = <<< STR
<xml>
<hoge>文字列<!--コメント-->文字列</hoge>
</xml>
STR;
$obj= new SimpleXMLElement($str);
-------------------------------------------

期待した結果
-------------------------------------------
$obj->hoge は "文字列文字列"
-------------------------------------------

現実
-------------------------------------------
$obj->hoge は "comment" オブジェクト
-------------------------------------------
SimpleXMLElementでどうやって回避していいか見つけられず、
そもそも入力文字列のコメントタグ部分を消してしまえばいいか
と思ったので、最短一致で置換するようこんな感じで対処した。

-------------------------------------------
$str = <<< STR
<xml>
<hoge>文字列<!--コメント-->文字列</hoge>
</xml>
STR;
$str=preg_replace('/\<\!--.*?--\>/m', '', $str);
$obj= new SimpleXMLElement($str);
-------------------------------------------

休み明けからそこそこ悩んだ1日になってしまった。
さて、今晩の体重は 75.2kg でした。

[ 2016/04/07 22:41 ] お勉強 | TB(0) | CM(0)
コメントの投稿








管理者にだけ表示を許可する