【问题标题】:Large XML Files and Pagination, is it possible?大型 XML 文件和分页,有可能吗?
【发布时间】:2010-01-06 15:29:06
【问题描述】:

问题

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

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

可以分页吗?

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

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

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

【问题讨论】:

  • 你的前两段是错误的,与你的问题基本无关。
  • +1,我遇到了同样的问题,一直在努力寻找能够查看/浏览超大 (1GB+) XML 文件的编辑器。
  • @bmargulies - 如果你这么说,我会说下面的投票和很好的答案否定了这一点,但每个人都有自己的看法。 @Eric - 你可能找不到它们,因为我相信所有编辑在加载它之前都必须阅读整个文件 - 据说我有时在 Notepad++ 上取得了一些成功。
  • 问题是不是打开文件。这需要几毫秒,在 SSD 上可能需要几微秒。将它们完全读入内存,将它们转换为可查看的文档——是的,这需要时间。但它严重依赖于 XML 模式。例如,Microsoft 的 .docx 文件 (OOXML) 打开速度相当快。

标签: xml xslt local offline


【解决方案1】:

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

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

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

【讨论】:

  • 我认为在将文件下载(作为 zip)呈现给用户之前简单地剪切文件可能会更容易,这有点烦人。
【解决方案2】:

好的,非常好的问题!

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

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

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

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

【讨论】:

  • 嘿,Roland,这看起来很有希望。我想知道这是否需要最终用户安装浏览器以外的任何东西?这需要让极客和非技术人员都能看到。
【解决方案3】:

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

【讨论】:

  • 它是带试用版的付费软件
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多