如何修复 XML“开始和结束标签不匹配错误”?
Posted
技术标签:
【中文标题】如何修复 XML“开始和结束标签不匹配错误”?【英文标题】:How to fix XML "Opening and ending tag mismatch error"? 【发布时间】: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。
【参考方案1】:
首先,如果您有损坏的数据,那么修复生成它的程序通常比修复数据更重要。
如果文件中唯一的错误是不匹配的结束标签,那么修复策略可能是完全忽略结束标签中的内容,因为出现在 XML 结束标签中的名称是多余的。您可能会发现现有工具(例如 TagSoup 或 validator.nu)可以按照您想要的方式处理此问题;或者您可能会发现这样的工具输出的 XML 可以转换成您想要的形式。这比为这种非 XML 语法编写自己的解析器更好。
【讨论】:
【参考方案2】:我认为这是一个简单的解决方案。
请检查您的结束标签。
例如这应该是正确的。
$xml.="</childelement>";
代替
$xml.="<childelement/>";
【讨论】:
以上是关于如何修复 XML“开始和结束标签不匹配错误”?的主要内容,如果未能解决你的问题,请参考以下文章
从源代码安装 PHP 时如何修复找不到 xml2-config 的错误?