2014年5月20日火曜日

simplexml_load_string(): Entity: line 1: parser error : StartTag: invalid element name

自分の場合ですが原因は以下でした

■利用シーン
system関数を利用してその返り値であるXMLをsimplexml_load_stringを使って解析する
XML自体は必ず正しいものが返ってくるものとする

■原因
system関数を利用していたため

XML内に改行コードが入っていたため

system関数は最後の1行を返すため、XML中に改行コードが入っているとXMLの最終行のみがsystem関数の返り値として返ってくるためうまくパースできなかった

■対処
sysytem関数を利用せずshell_exec関数を使用した
(同様の関数でexec関数という関数ももあるが試したところダメだったため、自分のケースでは最終的にshell_execを利用することで解決した)
また、shell_execで取得したレスポンスのXMLに対してstr_replaceを使い改行コードをすべて空白に置換した
改行コードを置換することでshell_execの返り値にXML全体が含まれるようになった
どうやらsystem関数の返り値に対してはstr_replaceでの置換がうまく動作しないようでそこに嵌った

とりあえず解決したので備忘録として残しておきます
ちなみにPHPのバージョンは5.3.3です

0 件のコメント:

コメントを投稿