无效格式的XML的最佳PHP解析器

3

什么是最好的xml解析器,特别是对于格式不正确且缺少<?xml标记的XML?

我不能使用simpleXML,因为它会因为无效而出现错误。我知道我可以在获取xml后手动添加所需的标记,但我更喜欢看看你们认为在php中将xml解析为数组的最佳方法是什么。


如果它不是有效的XML,那么从技术上讲它并不是真正的XML...所以不要期望XML解析器处理那些不是真正的XML的内容。期望一只鸡成为你的香蕉并没有什么用处。 - Marc B
大多数情况下,我遇到这样的错误是因为“禁止”的XML字符,可以在这里检查:https://dev59.com/RHRB5IYBdhLWcg3wET1J - user1299518
“Technically invalid”在这里是什么意思?仅仅缺少<?xml前言并不足以使其无效。你解析文档时遇到了哪些确切的问题?能否展示一些文档或错误信息的例子? - Francis Avila
该文档不包含<?xml标签,并且存在一些关闭标签,其中开放标签不存在。 - Yeak
2个回答

1
你可以使用SimpleXML,并通过libxml_use_internal_errors(false);禁用错误。如果SimpleXML无法使用您的字符串,我个人会使用DOM来解析/修复损坏的XML。

另一方面,为什么不在读取之前简单地添加<?xml字符呢?


这正是我所想的,但我不确定是否是最好的方法。此外,我尝试使用DOM,但无法使其工作。 - Yeak

0
你可以试试这个。
<?php
//invalid xml file
$xmlfile = 'test.xml';
$xmlparser = xml_parser_create();

// open a file and read data
$fp = fopen($xmlfile, 'r');
$xmldata = fread($fp, 4096);

xml_parse_into_struct($xmlparser,$xmldata,$values);

xml_parser_free($xmlparser);
print_r($values);
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接