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

用XML存储数据系列的最佳/正确/最有效方法是什么

  •  3
  • rossmcm  · 技术社区  · 14 年前

    我有一个将在XML文件中存储一系列(浮点)值的应用程序。可能有超过100000个值,所以我有兴趣减小大小,但我也希望第三方能够轻松访问文件。

    就在XML中对数据进行编码而言,似乎有多种方法可供我使用:

    1。

    <data>
      <value>12.34</value>
      <value>56.78</value>
      ...
      <value>90.12</value>
    </data>
    

    2。

    <data>
      <value v="12.34"/>
      <value v="56.78"/>
      ...
      <value v="90.12"/>
    </data> 
    

    三。

    <data>12.34
    56.78
      ...
    90.12
    </data> 
    

    4。

    <data>12.34, 56.78, ... 90.12</data> 
    

    可能还有更多的变化。

    我只是想知道这些方法的缺点(如果有的话)。例如,有些可能不符合要求。

    4 回复  |  直到 9 年前
        1
  •  3
  •   Chase Florell    14 年前

    我不认为有更好的方法。阅读我上面的评论,寻找替代方案。但是,如果您对XML很着迷,那么就使用适合您的任何工具。我个人喜欢这样的东西

    <data>
       <item key="somekey1" value="somevalue1" />
       <item key="somekey2" value="somevalue2" />
       <item key="somekey3" value="somevalue3" />
    </data>
    

    简单地说,因为它美观、易读,并且使标签更小。

    编辑:

    记住,XML中的字符越少,字符越小。(再说一次,为什么我建议JSON),所以如果你能把它弄得又好又紧,就一定要这么做。

    <d>
       <i k="somekey1" v="somevalue1" />
       <i k="somekey2" v="somevalue2" />
       <i k="somekey3" v="somevalue3" />
    </d>
    

    编辑:

    另外,我知道你没有问,但我想我会告诉你JSON是什么样子的

       [{ "key": "somevalue1", "value": "somevalue1"},
        { "key": "somevalue2", "value": "somevalue2"}]
    
        2
  •  3
  •   Will Hartung    14 年前

    从语义上讲,1和2之间没有“区别”。同样地,3和4之间也没有区别,只有一个是分隔的。另外请注意,XML中的空白是/可以忽略的,因此如果您阅读3,它很可能是“一条长线”,没有任何新行分隔它们。

    至于哪个更好,取决于您的应用程序以及您如何计划使用数据。

    序列化版本(每个数字都在自己的元素中)为用户提供对单个数字的“直接”访问。

    使用分隔的“blob”需要用户自己解析它,因此这取决于您希望提供哪种类型的接口。

    此外,“blob”技术还倾向于防止XML被“流化”,因为您将拥有一个巨大的元素,而不是一堆小元素。这会对内存产生很大影响。

    至于总的文件大小,可能有助于知道你们中的人实际上压缩了这些数据,最终的压缩大小可能非常接近彼此,而不管使用哪种技术。不知道该属性是否重要。

        3
  •  2
  •   Anthony Pegram    14 年前

    前两种形式优于后两种形式,第一种是最好的。后两个需要先读取数据的内容并将其拆分,然后才能使用。然而,前两个允许您枚举数据,并且在任何给定时间只使用您需要的一个或多个部分。但是,第二个表单通过一个属性将值嵌入到另一个层中,这使得它比第一个更不理想(前提是每个特定数据点没有其他元素/属性)。

        4
  •  1
  •   Gorkem Pacaci    14 年前

    如果您的文件将处理的唯一数据总是那些浮点值,那么不要使用XML。只能使用每行中都有值的纯文本文件。它的读写速度要快很多倍,而且它的自我描述能力也不会比您编写的XML示例差一点。

    XML可能是一种需求,例如,您将使用来自具有不同文化(tr、en、fr)的不同应用程序/系统/用户的XML文件。有些用“.”(12.34)浮写,而有些用“,”(12,34)浮写。XML解析器将为您处理所有这些内容。因此,如果XML是一种需求,那么您编写的第三和第四个示例完全没有XML的意义。在实践中,它们与使用纯文本文件没有什么不同,除了执行任务的慢速XML解析器。

    你写的第一个和第二个样本在意义/解释上只有细微的差别。第一个意思是你想要呈现的实际数据是12.34,它是一个“值”。第二个意思是有一个“值”,与之相关的“v”数据是12.34。