了解模拟的输入输出文件的XML使用/优势

时间:2012-03-01 18:04:42

标签: xml

我的教授,(由于一些无法解释的原因)想要将我们的气体模拟(用C ++编写)的所有输入输出文件从我们曾经使用的普通.txt文件更改为XML文件格式到目前为止使用。

我被告知的是,XML文件格式“很好”,它有助于更​​好地“组织数据”。 关于XML的广告的Google搜索引发了大量关于如何使用“数据库”和“网络开发”的信息,以及我对其缺乏知识并且我只是不感兴趣的其他领域。

令我沮丧的是,有关C ++ XML解析器(如Xerces或RapidXML)的所有文档都显示出来 在文档上非常差。无论什么文档都在其介绍性示例中使用了许多花哨的XML术语(“DOM?”“SAX?”“schema?”)。

总的来说,只需将我的输入输出文件格式从.txt切换到“XML”似乎是一个巨大的痛苦

所以我的问题是3折。

  1. 如果我将XML文档格式用作初始设置/数据,那么它的真正优势是什么? 文件格式?

  2. 我通常使用的输入和输出文件的一个例子是

  3. 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 ++。

2 个答案:

答案 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你会失去一些性能,但我认为大多数成熟的库都足够快。