代码之家  ›  专栏  ›  技术社区  ›  Woot4Moo

通过网络解析大型XML文件

  •  3
  • Woot4Moo  · 技术社区  · 15 年前

    我在网站上做了一些快速搜索,但似乎找不到我想要的答案,所以说,在网络上传递大型xml文件的最佳实践是什么。我对这个问题的想法是在网络上以可管理的片段流式传输数据块,但是我正在寻找其他方法和最佳实践。我意识到大是一个相对的术语,所以我将让你选择一个任意的值作为大。

    编辑:

    我看到很多关于压缩的讨论,有没有什么特别的压缩算法可以被利用,或者在解压缩这些文件方面?当我意识到有经过验证的算法存在时,我并没有太多的愿望来推出自己的算法。我也感谢迄今为止的答复。

    5 回复  |  直到 15 年前
        1
  •  2
  •   Amir Moghimi    15 年前

    压缩和减少XML大小是一个十多年来一直存在的问题,特别是在带宽和客户端计算能力都是稀缺资源的移动通信中。无线通信中使用的最终解决方案是 WBXML ( WAP Binary XML Spec ).

    该规范定义了如何将XML转换为二进制格式,这种格式不仅紧凑,而且易于解析。这与通用压缩方法(如gzip)不同,gzip需要接收器端的高计算能力和内存来解压缩然后解析XML内容。该规范的唯一缺点是两侧都应该存在一个应用程序令牌表,它是一个静态定义的代码表,用于保存特定于应用程序的XML内容中所有可能的标记和属性的二进制值。如今,这种格式广泛应用于移动通信中,用于传输大多数应用中的配置和数据,例如OTA配置和联系人/备忘/日历/电子邮件同步。

    here ,在“2.6”节中描述了该机制。大型物体处理”。作为简短的介绍:

    此功能提供了一种同步对象的方法,该对象的大小超过了可在一条消息中传输的大小(例如,MaxMsgSize中声明的最大消息大小) 目标设备可以接收的元素)。这是通过将对象分割成块(每个块都适合一条消息)并连续发送来实现的。发送的第一个数据块具有对象的总体大小,并且有一个MoreData标记表示将发送更多的数据块。除最后一个区块外,每个后续区块都会发送一个MoreData标记。

        2
  •  2
  •   Eli    15 年前

    根据它的大小,您可能需要首先考虑压缩它。当然,这取决于同一数据的发送频率和更改频率。

        3
  •  1
  •   Hamish Grubijan    15 年前

    压缩是一种明显的方法。这个XML错误会缩小,就像没有明天一样。

        4
  •  0
  •   Andrew McGregor    15 年前

    如果可以在服务器上保留一个本地副本和两个副本,则可以使用 diffxml

        5
  •  -1
  •   Shanti    15 年前

    您是使用适当的XML解析器来阅读XML,还是带着对特定布局的期望来阅读XML?