大型XML文件和分页,是否可能?

时间:2010-01-06 15:29:07

标签: xml xslt local offline

问题

在您的计算机上本地打开非常大的XML文件时,几乎可以确定该文件需要一段时间才能打开 - 这通常意味着您的计算机因为认为它没有响应而锁定。

如果您为用户提供他们使用的相当复杂的数据库或系统的XML备份,这就是一个问题 - 他们能够打开大型备份,更不用说使用它们的可能性很小。

分页是否可能?

我使用XSLT向用户呈现可读的备份。以同样的方式,是否可以在数据时仅拉取一个页面,以防止整个文件被一次性读取,从而导致上述问题。

我想答案只是一个答案 - 但我想知道是否有其他人看到了同样的问题并解决了这些问题。

注意:这只在本地计算机上,不能要求互联网连接。如果它使事情变得容易,可以使用JavaScript。

5 个答案:

答案 0 :(得分:3)

可以使用XSLT进行分页,但可能不会产生预期的结果:要使XSLT正常工作,必须将整个XML文档解析为DOM树。

您可以做的是尝试流式转换:http://stx.sourceforge.net/

或者您可以预处理大型XML文件,以便在使用XSLT进行处理之前将其削减为较小的位。为此,我使用命令行工具,如XMLStarlet

答案 1 :(得分:2)

正确,非常好的问题!

我知道XSLT实现需要DOM,因此它们必须访问整个文档(尽管它可能以一种懒惰的方式完成)

无论如何,你应该看看VTD-XML:http://vtd-xml.sourceforge.net/

最新的SAXON XSLT处理器还支持对所谓的“流式XSLT”的基本支持。在此处阅读:http://www.saxonica.com/documentation/index/intro.html

尽管如此,数据库备份可能不是XML的正确用例。如果您必须处理XML数据库备份,我会尝试尽可能快地远离这些备份。对于日志也是如此 - 线性过程应该只需附加内容即可。我的意思是,XML会更好地允许森林作为顶级结构,但我认为这永远不会发生。

答案 2 :(得分:1)

XMLMax Virtual xml编辑器将在快速PC上读取,解析并在树视图中显示1 Gigabyte xml文件,大约30秒。仅限Windows操作系统。它适用于任何大小或结构的xml。

答案 3 :(得分:0)

HI, 我不知道你正在使用什么编程语言,但在使用XMLReader的C#中,我可以按标签而不是整个文件读取文件标签。这样您就可以只读取第一页并停止阅读。 最好的祝福, Iordan

答案 4 :(得分:0)

缓解此问题的一种方法是将大型XML文件拆分为许多较小的XML文档。根据数据类型,您可以以任意数量的方式拆分或分区文件(即日,交易,实体等)

这当然会引入许多其他挑战。例如,如果您需要整体或跨分区查看数据,则必须提供专门的解析器。