2011-08-05 5 views
0

正しくフォーマットされていないXMLファイルを入力しています(つまり、& amp;の代わりに '&') PHP DOMを使用してこのXMLをロードしようとすると、$ doc-> load( "file.xml")これは、スローしてエラーを出し、解析を停止します。PHP DOMで無効なXMLをロード

このフォーマットされていないXMLをロードする方法はありますか?いいえソースXMLファイルを編集できません。 私は$ doc-> loadHTML()を使ってみましたが、どこにでもエラーを投げます。

私は(ロード・ファイルの内容のようにして正規表現または類似のものを使用してそれを変更)これを行うための適切な方法があるかどうかを知りたいと思った

答えて

0

まず、それが何かをエラーの原因といない&だことを確認してください。

何か別の場合は、XMLを解析して解析する必要があります。 loadHTMLのHTMLが文字列からロードされていますが、無効な文字を正しい文字に置き換えることはできませんか?

あなたのインストールでPHP Tidy拡張機能(http://php.net/manual/en/book.tidy.php)がサポートされている場合は、それを使ってクリーンアップを試みることができます。

+0

はい、問題を引き起こしているアンパサンドです。私はちょうどすべての&と置き換えたいとは思わない&-amp;の場合は、入力として有効なXMLを取得すると問題が発生します。私はきちんとした拡張について多くを知っていません。これは、HTMLツールの多くを見て、XMLクリーンアップに適した関数を見つけました。 – Nithin

+0

私は少し多くを検索し、ティディは問題を解決するようです。これは私がやったことです: '$コンフィグ=配列( \t \t \t 'インデント' => trueの場合、 \t \t \t '入力-XML' => trueの場合、 \t \t \t '出力のxml' => TRUE); $ clean = $ tidy-> repairString(file_get_contents($ file)、$ config); ' – Nithin

0

あなたはそれはそれは検証されませ作るだけの事だと確信している場合は、&その後、S「の&にS」の&を変更するには、文字列によって置き換える検索し、その後、file_get_contents()機能で文字列にファイルをロードしてみてくださいその文字列をsimpleXMLのように配置してください$xml = simplexml_load_string($cleaned_string);

+0

上記のポスターへの返信として掲示されているように、それは私が有効なXMLを読み込むときに問題を引き起こすでしょう。 – Nithin

1

$doc->loadHTML(...)でXMLをロードする前に$doc->validateOnParse = false;に設定してみてください。

+0

ちょうどそれを試みたが、これは問題を解決していないようだ。 – Nithin