rgu*_*les 7 php xml xml-parsing
我正在尝试修复包含数千行错误的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));
}
}
Run Code Online (Sandbox Code Playgroud)
任何的想法?
首先,如果您的数据已损坏,那么修复生成数据的程序通常比修复数据更重要。
如果文件中唯一的错误是结束标记不匹配,则假定修复策略是完全忽略结束标记中的内容,因为 XML 结束标记中出现的名称是多余的。您可能会发现现有的工具(例如 TagSoup 或 validator.nu)可以按照您想要的方式处理此问题;或者您可能会发现这样的工具输出 XML,可以将其转换为您想要的形式。这比为这种非 XML 语法编写自己的解析器有更好的前景。
| 归档时间: |
|
| 查看次数: |
28502 次 |
| 最近记录: |