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

用XML存储数据系列的最佳/正确/最有效的方法是什么,xml,series,Xml,Series,我有一个将在XML文件中存储一系列(浮点)值的应用程序。可能会有100000个以上的值,所以我有兴趣将大小保持在较低的水平,但我也希望第三方能够轻松访问文件 就XML中的数据编码而言,似乎有各种方法可供我使用: 一, 12.34 56.78 ... 90.12 二, ... 三, 12.34 56.78 ... 90.12 四, 12.34,56.78。。。90.12 而且可能还有更多的变化 我只是想知道这些方法的缺点(如果有的话)。例如,有些可能不符合要求。我认为没有“更好”的方法

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

就XML中的数据编码而言,似乎有各种方法可供我使用:

一,


12.34
56.78
...
90.12
二,


...
三,

12.34
56.78
...
90.12
四,

12.34,56.78。。。90.12
而且可能还有更多的变化

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

我认为没有“更好”的方法。阅读我上面的评论,寻找替代方案。但是,如果您对XML着迷,那么就选择适合您的方式。我个人更喜欢这样的东西

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

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

从语义上讲,1和2之间没有“区别”。类似地,3和4之间没有区别,只是其中一个是分隔的。还请注意,在XML中可以忽略空格,因此如果阅读#3,它很可能会变成“一条长线”,而没有任何新行分隔它们

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

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

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

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


至于文件的总大小,了解一下实际压缩这些数据的情况可能会有所帮助,不管采用何种技术,最终的压缩大小都可能非常接近。不知道该属性是否重要。

如果文件将处理的唯一数据总是那些浮点值,请不要使用XML。仅使用每行都有值的纯文本文件。它的读写速度将快很多倍,而且与您编写的XML示例相比,它的自描述性甚至不会少一点

XML可能是一种需求,例如,您将使用来自具有不同文化(TR、EN、FR)的不同应用程序/系统/用户的XML文件。有些写浮点数时使用“.”(12.34),而有些写浮点数时使用“,”(12,34)。XML解析器将为您处理所有这些内容。因此,如果XML是一种需求,那么您编写的第3个和第4个示例完全没有说明XML的意义。在实践中,它们与使用纯文本文件没有什么不同,只是使用了慢的XML解析器


您编写的第一个和第二个示例在含义/解释上只有细微的差异。第一个表示您想要呈现的实际数据是12.34,它是一个“值”。第二个表示存在一个“值”,与之相关联的“v”数据是12.34。

您是否仍停留在XML上?这是一种古老的存储格式。您可以尝试将JSON用于更小的大小。还请记住,XML更好地用于传输信息,而不一定用于存储信息?到目前为止的答案都假设可读性很重要,但当我在XML文件中存储100K“平面”值时,我知道我不可能手动读取它们,所以可读性并不重要。如果你不需要它们可读性,我可以给你一些打包方法,这些方法会占用你以上选择的一小部分空间。使用XML的原因是使第三方应用程序开发人员可以访问数据文件。目前,数据文件是专有的二进制格式,我们必须提供csv/xls导出功能。如果数据文件是xml,我们不需要提供任何其他工具。如果使用变量2(?),JSON实际上并不是更小。XML也是可扩展的,因为我们可以在不破坏现有软件的情况下添加数据。此外,我们还可以轻松地使用加密/压缩/数字签名/篡改检测技术。JSON的一个好论点是,它可以在javascript(javascript对象表示法)中本机读取。现在还有其他语言使用内置的JSON读取器(.NET为例)。因此,如果你正在提供数据,那么另一个应用程序可以非常简单地使用JSON。不过,RSS阅读器之类的东西仍然在使用XML,谷歌也在使用网站地图之类的东西。我同意关于后两者的部分。虽然您可以减小文件大小,但您必须让服务器更努力地提取内容。
文本和
之间真的有那么大的区别吗?在.NET上,它是.Text(或者是.Value)与.Attribute(“tag”)的区别,所以是的,少了几个字符,但在访问方法上没有区别。@drachenstein-是的,我从.NET的角度考虑它,特别是LINQ,在LINQ中,我可以访问元素.Value(或(float)元素或元素.Attribute(somename).Value(…(float)作为值)元素。属性(somename))。这是我的首选,但如果我不需要将数据嵌入另一层,我会牺牲磁盘空间。我不喜欢你的第二个表单。尺寸是一个考虑因素,但考虑到两者之间的选择
<data>
  <value v="12.34"/>
  <value v="56.78"/>
  ...
  <value v="90.12"/>
</data> 
<data>12.34
56.78
  ...
90.12
</data> 
<data>12.34, 56.78, ... 90.12</data> 
<data>
   <item key="somekey1" value="somevalue1" />
   <item key="somekey2" value="somevalue2" />
   <item key="somekey3" value="somevalue3" />
</data>
<d>
   <i k="somekey1" v="somevalue1" />
   <i k="somekey2" v="somevalue2" />
   <i k="somekey3" v="somevalue3" />
</d>
   [{ "key": "somevalue1", "value": "somevalue1"},
    { "key": "somevalue2", "value": "somevalue2"}]