在您的计算机上本地打开非常大的XML文件时,几乎可以确定该文件需要一段时间才能打开 - 这通常意味着您的计算机因为认为它没有响应而锁定。
如果您为用户提供他们使用的相当复杂的数据库或系统的XML备份,这就是一个问题 - 他们能够打开大型备份,更不用说使用它们的可能性很小。
我使用XSLT向用户呈现可读的备份。以同样的方式,是否可以在数据时仅拉取一个页面,以防止整个文件被一次性读取,从而导致上述问题。
我想答案只是一个答案 - 但我想知道是否有其他人看到了同样的问题并解决了这些问题。
注意:这只在本地计算机上,不能要求互联网连接。如果它使事情变得容易,可以使用JavaScript。
答案 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文档。根据数据类型,您可以以任意数量的方式拆分或分区文件(即日,交易,实体等)
这当然会引入许多其他挑战。例如,如果您需要整体或跨分区查看数据,则必须提供专门的解析器。