我的教授,(由于一些无法解释的原因)想要将我们的气体模拟(用C ++编写)的所有输入输出文件从我们曾经使用的普通.txt
文件更改为XML文件格式到目前为止使用。
我被告知的是,XML文件格式“很好”,它有助于更好地“组织数据”。 关于XML的广告的Google搜索引发了大量关于如何使用“数据库”和“网络开发”的信息,以及我对其缺乏知识并且我只是不感兴趣的其他领域。
令我沮丧的是,有关C ++ XML解析器(如Xerces或RapidXML)的所有文档都显示出来 在文档上非常差。无论什么文档都在其介绍性示例中使用了许多花哨的XML术语(“DOM?”“SAX?”“schema?”)。
总的来说,只需将我的输入输出文件格式从.txt
切换到“XML”似乎是一个巨大的痛苦
所以我的问题是3折。
如果我将XML文档格式用作初始设置/数据,那么它的真正优势是什么? 文件格式?
我通常使用的输入和输出文件的一个例子是
Pressure Temperature Volume Radius 0.2 7.8 4.5 6.7 0.5 4.5 7.8 8.9 0.6 7.8 4.5 1.2 0.7 4.5 8.9 2.3
在这里切换到XML会有什么好处吗?我该怎么办?像上面这样的文本文件通常有50000行数,其中我只显示了4行。 与ASCII相比,XML文件的读取/输出速度是否有优势 文字文件格式?
3。
有人能告诉我如何重写上面的柱状数据
在XML文件格式?此外,如果有人可以给我一个完整的C ++代码示例,说明如何解析此文件并将数据输出到数组pressure[N]
'temperature [N]'等,这将是很好的。
我知道SO用户对帮助解决代码感到不满,除非OP尝试自己编写代码来解决问题。所以对于问题 3 ,如果有人可以通过有用的新手链接让我走上正确的轨道,这将有用,所以我可以继续更新这篇文章,试图解析包含colmnar数据的简单XML文件,如上所述使用C ++。
答案 0 :(得分:3)
我知道很难理解它在开始时的优势,特别是如果您处理的是少量信息或非常小的数据集。有时手动解析它们似乎确实是一个更好的选择。
但是,在使用适度的大型数据集时,当数据条目连接或与自身有某种关系时,最好用XML描述它们。为什么?它允许我以通用格式构建数据,这种格式主要由IT行业使用。有几种不同的技术(数据库,编程库等)允许我存储并快速找到我正在寻找的数据。
就是一个例子,上周我在一个项目中工作(由于一些阴暗的原因)需要记录文件系统树的快照以及文件的md5。为此,我决定开发一个小型C ++应用程序(使用RapidXML)来检索整个文件系统树,并以XML格式记录每个文件的md5总和。
这样可以更容易地描述目录,子目录和文件之间的关系。
例如,以下树:
.
├── dir1
│ └── subdir1_1
│ └── subdir1_2
│ └── subfile1_2
├── dir2
│ └── subdir2_1
│ └── subfile2_1
├── dir3
│ └── subdir3_1
│ └── subdir3_2
│ └── subdir3_3
│ └── subdir3_4
│ └── subfile3_4
├── nodeid
最终被翻译成这种结构:
<?xml version="1.0" encoding="utf-8"?>
<directory name="dir1">
<directory name="subdir1_1">
<directory name="subdir1_2">
<file name="subfile1_2" md5="d41d8cd98f00b204e9800998ecf8427e"/>
<directory name="dir3">
<directory name="subdir3_1">
<file name="subfile3_4" md5="d41d8cd98f00b204e9800998ecf8427e"/>
</directory>
</directory>
</directory>
</directory>
</directory>
<file name="nodeid" md5="045f8e15c66c91bcd503377c4b0bd565"/>
<directory name="dir2">
<directory name="subdir2_1">
<file name="subfile2_1" md5="d41d8cd98f00b204e9800998ecf8427e"/>
</directory>
</directory>
在XML格式的文件中搜索比非格式化文件更好,因为您不必读取文件中的每一条数据,以便能够找到您要查找的内容。相反,您可以跳过整个数据部分并直接前进,从而提供更快的搜索机制。
现在,回到你的问题。我将按以下格式描述您的数据集:压力,温度,体积和半径似乎是以某种方式连接以描述单个元素的属性。因此,将它们组合在一起描述element
:
<element Pressure="0.2" Temperature="7.8" Volume="4.5" Radius="6.7"/>
<element Pressure="0.5" Temperature="4.5" Volume="7.8" Radius="8.9"/>
等等。
答案 1 :(得分:1)
如果你真的想要利用你必须吞下丑陋的青蛙并学习一些新的词汇。看看karlphillip的好例子
如果我将XML文档格式用作初始设置/数据文件格式,那么它的真正优势是什么?
XML为您的xml文件定义架构提供了优势,您可以检查输入是否正确。您可以定义XML Schema并说明例如压力应始终为格式0. [0-9]或类似的东西。在为机器解析时,您的文件更容易为人类阅读。
在这里切换到XML会有什么好处吗?我该怎么办?像上面这样的文本文件通常有50000行,其中我只显示了4行。是否可以像ASCII文本文件格式那样读取/输出XML文件的速度有什么优势?
样品是自动还是手动输入txt文件?对于后一种情况,优点是在添加新数据时没有搞砸(比如改变顺序或错误的格式)。您的XML可能如下所示:
<sample id="1">
<pressure>0.2</pressure>
<temperature>7.8</temperature>
<volume>4.5</volume>
<radius>6.7</radius>
</sample>
<sample id="2">....</sample>
或者看起来像
<sample id="1" Pressure="0.2" Temperature="7.8" Volume="4.5" Radius="6.7"/>
我认为速度方面xml解决方案速度较慢,因为xml处理开销很大,但你可以获得格式的可用性。
第3点:我不是C ++程序员(至少不是经验丰富的程序员),这个链接怎么样:http://www.applied-mathematics.net/tools/xmlParser.html(似乎作者感到你经历过的一些同样的痛苦,但要注意:似乎是一个非验证解析器)
为了将旧数据转换为xml,我首先要考虑如何构建xml文件。然后我会使用perl / python / ruby / favoritescriptlanguage,它将以我的旧格式读取并以xml形式吐出。
编辑: 亲:基本上你得到的格式很容易被人类阅读,并且仍可由机器解析。您可以为您的格式定义模式(使用XML Schema或DTD),以便验证您的格式。您将获得大量用于处理xml的库和应用程序。我认为大多数开发人员与自定义格式相比,理解xml文件的结构没有问题(尽管您的格式相对简单)。
Con:你必须学习新的词汇。您必须将旧数据转换为xml。你必须学习一些库来读写xml。 Speedwise你会失去一些性能,但我认为大多数成熟的库都足够快。