【发布时间】:2014-10-19 01:33:41
【问题描述】:
我正在尝试修复包含数千行错误的 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));
}
}
有什么想法吗?
【问题讨论】:
-
坏线是什么样子的?
-
听起来更像是 HTML 而不是 XML。即使不是,解析 HTML 的工具也可能更宽容,因为它通常不会将未关闭的元素视为错误。
<br>没有</br>是完全有效的 HTML。
标签: php xml xml-parsing