エラーのある数千行のXMLファイルを修正しようとしています。
タグの開始と終了の不一致エラー
現在、simpleXMLを使用してこのファイルを解析しているため、このライブラリで解析する前に、XMLファイルを修正する必要があります。
現在、私はこのソリューションを試していますが、それだけでは十分ではありません。
libxml_use_internal_errors(true);
$xml = @simplexml_load_file($temp_name);
$errors = libxml_get_errors();
foreach ($errors as $error) {
if (strpos($error->message, 'Opening and ending tag mismatch')!==false) {
$tag = trim(preg_replace('/Opening and ending tag mismatch: (.*) line.*/', '$1', $error->message));
$lines = file($temp_name, FILE_IGNORE_NEW_LINES);
$line = $error->line+1;
echo $line;
echo "<br>";
$lines[$line] = '</'.$tag.'>'.$lines[$line];
file_put_contents($temp_name, implode("\n", $lines));
}
}
何か案が?
まず、破損したデータがある場合は、それを生成したプログラムを修正することが、通常、データを修復するよりも重要です。
ファイル内の唯一のエラーが不一致の終了タグである場合、XML終了タグに表示される名前が冗長であることを考えると、おそらく修復戦略は終了タグ内の内容を完全に無視することです。 TagSoupやvalidator.nuなどの既存のツールがこれを希望どおりに処理する場合があります。または、そのようなツールがXMLを出力し、それを必要な形式に変換できる場合があります。これは、この非XML文法用に独自のパーサーを作成するよりも良い見通しです。