【发布时间】:2013-03-18 17:30:33
【问题描述】:
我必须阅读一些非常重的 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>
显然,g:material 标记中缺少 </ul> 结束标记。此外,开发此提要的人应该将g:material 内容包含在CDATA 中,但他们没有...基本上,这就是我想要做的:添加这个缺少的CDATA 部分。
我尝试使用 SAX 解析器读取此文件,但在读取 </g:material> 标记时失败,因为缺少 </ul> 标记。我尝试过使用 XMLReader,但遇到了基本相同的问题。
我可能可以用 DomDocument::loadHtml 做一些事情,但是这个文件的大小与 DOM 方法并不真正兼容。
您知道我如何可以简单地修复此提要,而无需购买大量 RAM 以供 DomDocument 工作吗?
谢谢。
【问题讨论】:
-
是的,他们应该这样做。如果您知道问题出在哪里,您可以随时尝试使用正则表达式查找/替换所有文件。但这不应该是你首先关心的问题。
-
嘿,Rémi,你不能先读取字符串,然后添加 CDATA 部分,然后再将其推送到 xml 加载器?
-
是的,这就是我正在考虑的以及我现在正在做的事情,但我仍然希望有比逐个字符读取 XML 或使用正则表达式查找/替换更好的想法:)跨度>
-
查看类似(最早的)问题:stackoverflow.com/q/2939250/287948