我必须读取一些相当重的 XML 文件(200 MB 到 1 GB 之间),其中一些文件是无效的。让我举一个小例子:
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<item>
<title>Some article</title>
<g:material><ul><li>50 % Coton</li><li>50% Lyocell</li></g:material>
</item>
</rss>
显然,有一个缺失</ul>
中的结束标签g:material
标签。此外,开发这种饲料的人应该已经附上g:material
内容进入CDATA
,他们没有......基本上,这就是我想做的:添加这个缺失的CDATA
部分。
我尝试使用 SAX 解析器来读取此文件,但读取时失败</g:material>
标签自</ul>
标签丢失。我尝试过使用 XMLReader 但遇到了基本相同的问题。
我可能可以使用 DomDocument::loadHtml 做一些事情,但是这个文件的大小与 DOM 方法并不真正兼容。
您知道如何简单地修复此提要,而无需购买大量 RAM 来让 DomDocument 工作吗?
谢谢。
如果文件太大而无法使用Tidy http://www.php.net/manual/en/book.tidy.php扩展,您可以使用整洁的 CLI 工具 http://linux.die.net/man/1/tidy使文件可解析。
$ tidy -output my.clean.xml my.xml
之后,XML 文件格式正确,因此您可以使用 XMLReader 来解析它们。由于 tidy 添加了“缺失”的 (X)HTML 部分,因此原始文档的代码位于元素内部。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)