在C ++程序中读取XML文件

时间:2012-02-27 22:18:06

标签: c++ xml

我正在尝试在我的C ++程序中读取XML文件。 XML文件看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<myprogram>
<configuration>
<window>
<height> 300 </height>
<width> 500 </width>
</window>
</configuration>
</myprogram>

现在我可以查看XML文件并试着像这样阅读:

ifstream in("mydata.xml");

//ignore the <?xml line
in.ignore(200, '\n');

//i know that the first value i want is the window height so i can ignore <myprogram> <configuration> and <window>

//ignore <myprogram>
in.ignore(200, '\n');

//ignore <configuration>
in.ignore(200, '\n');

//ignore <window>
in.ignore(200, '\n');

string s; int height;

//okay, now i have my height
in >> s >> height;

一般来说,这似乎是一个坏主意,它确实限制了XML文件的修改方式。上面的解决方案是非常手动的,如果XML中的任何内容发生变化,似乎必须更改整个读取方法。

有更好的方法吗?

5 个答案:

答案 0 :(得分:5)

您可以使用一些可以为您完成此操作的库。如果您使用的是Windows平台,则可以使用MSXML,它已经是系统的一部分。

请检查此问题:Read Write XML File In C++

其他热门图书馆:

答案 1 :(得分:3)

您需要一个XML Parser。那里有一堆:

我个人最喜欢的是pugiXML,但这是个人偏好的问题。

答案 2 :(得分:1)

您可以使用具有解析XML功能的POCO库

答案 3 :(得分:1)

boost属性树适用于xml,我会用它。

答案 4 :(得分:1)

在多平台源代码中,我通常使用Qt XML阅读器。

您有3种阅读方式:

  1. Qt core QXmlStreamReader - Qt阅读方式
  2. SAX2 reader - 具有内容处理
  3. 的标准SAX2阅读器
  4. DOM reader - 带有XML节点的DOM文档阅读器
  5. 如果您只编写Windows软件,则应使用MSXML 6.由于Windows XP SP3 MSXML 6.0是操作系统的一部分。

    在Linux上,您应该使用libxml2