6

问题

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

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

分页可以吗?

我使用 XSLT 向用户提供可读的备份。同理,是否可以一次拉取一页数据,以防止一次读取整个文件,从而导致上述问题。

我想答案是否定的——但我想知道是否有其他人看到过同样的问题并解决了这些问题。

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

4

5 回答 5

3

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

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

或者,您可以在使用 XSLT 处理之前预处理大型 XML 文件以将其切割成更小的部分。为此,我会使用像XMLStarlet这样的命令行工具

于 2010-01-06T15:37:10.727 回答
2

对了,很好的问题!

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

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

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

也就是说,数据库备份可能不是 XML 的正确用例。如果您必须处理 XML 数据库备份,我会尽可能快地摆脱这些备份。日志也是如此 - 线性过程应该通过简单地附加东西来工作。我的意思是,如果 XML 允许森林作为顶级结构会更好,但我认为这永远不会发生。

于 2010-01-06T15:38:12.160 回答
1

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

于 2010-01-26T13:31:22.930 回答
0

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

于 2010-01-06T15:37:27.637 回答
0

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

当然,这将带来许多其他挑战。例如,如果您需要将数据作为一个整体或跨分区查看,您将不得不提出一个专门的解析器。

于 2010-01-06T15:38:06.933 回答