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

6

问题

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

如果您向用户提供相当复杂的数据库或系统的XML备份,则存在问题 - 他们能够打开大型备份的可能性很小,更不用说使用它们了。

是否可以分页?

我使用XSLT向用户呈现可读的备份。以同样的方式,是否有可能每次仅拉取一页数据,以防止一次读取整个文件,从而引起上述问题。

我想答案很简单,就是不能 - 但我想知道是否有其他人遇到了相同的问题并解决了它们。

注意:这仅适用于本地机器,不得要求互联网连接。如果JavaScript能够使事情变得更容易,则可以使用它。


你的前两段话是错误的,而且与你的问题大部分无关。 - bmargulies
+1,我也遇到了同样的问题,并一直在努力寻找一个能够查看/浏览非常大(1GB +)XML文件的编辑器。 - Eric Petroelje
@bmargulies - 如果您这么说,我会说下面的投票和出色的答案抵消了这一点,但每个人都有自己的看法。@Eric - 你可能找不到它们,因为我认为所有编辑器在加载文件之前都必须阅读整个文件 - 话虽如此,我有时候使用Notepad ++取得了一些成功。 - jakeisonline
问题并不在于打开文件。这只需要毫秒级别的时间,SSD上甚至可能只需要微秒级别的时间。将它们完全读入内存,转换为可视文档 - 是的,这需要时间。但这在很大程度上取决于XML模式。例如,微软的.docx文件(OOXML)打开得相当快。 - MSalters
5个回答

3
使用XSLT进行分页是可能的,但可能不会产生预期结果:为了使XSLT正常工作,整个XML文档必须解析成DOM树。
您可以尝试使用流式转换:http://stx.sourceforge.net/
或者,在使用XSLT处理之前,您可以将大的XML文件预处理成更小的文件。为此,我建议使用命令行工具XMLStarlet

我认为在向用户提供文件下载之前将其切割成小块可能更容易,这样做有点烦人。 - jakeisonline

2

非常好的问题!

我知道的XSLT实现需要DOM,因此它们绑定访问整个文档(尽管可以采用延迟方式进行)。

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

最新的SAXON XSLT处理器也支持所谓的“流XSLT”的基本支持。在这里阅读更多信息:http://www.saxonica.com/documentation/index/intro.html

话虽如此,数据库备份可能不是XML的正确用例。如果您必须处理XML数据库备份,我建议您尽快摆脱它们。对于日志也是同样,一个线性过程应该通过简单地附加事物来工作。我的意思是,如果XML允许森林作为顶级结构,那将更好,但我认为这永远不会发生。


嗨,罗兰,这看起来很有前途。我在想除了浏览器之外,这是否需要终端用户安装其他任何东西?这需要能够被技术人员和非技术人员都能查看。 - jakeisonline

1

XMLMax 虚拟 XML 编辑器可以在快速 PC 上约 30 秒内以树形视图读取、解析并显示 1 GB 的 XML 文件。仅适用于 Windows 操作系统。它能够处理任何大小或结构的 XML。


它是一款付费软件,但有试用版本。 - userJT

0

你好, 我不知道你使用的是哪种编程语言,但在C#中,使用XMLReader可以逐个标签读取文件,而不是整个文件。这样,你就可以只读取第一页并停止阅读。 最好的问候, Iordan


0

缓解这个问题的一种方法是将大型XML文件拆分为多个较小的XML文档。根据数据类型,您可以按任意方式拆分或分区文件(例如按天、交易、实体等)。

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


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