在C++程序中读取XML文件
我正在尝试在我的C++程序中读取XML文件。 XML文件看起来是这样的:在C++程序中读取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中的任何内容发生更改,似乎读取它的整个方法都必须更改。
有没有更好的方法来做到这一点?
你可以使用一些库,会为你做POCO库。如果你在Windows平台上工作,你可以使用已经是系统一部分的MSXML。
检查这个问题:Read Write XML File In C++
MSXML听起来像它可能是我正在寻找。这是一个Windows程序,所以我会先试一试。谢谢你的提示。 – user974967 2012-02-27 22:52:04
对RapidXml进行投票,因为它是仅包含头文件的库,不具有依赖关系。 – 2012-03-06 16:44:27
您可以使用具有功能解析XML
提升属性树的作品非常好,XML,我会使用它。
我认为你不会获得Boost用于属性树的RapidXml库。除非你已经使用Boost,否则这将会增加一个大的依赖项,而不是单个头文件(RapidXml)。 – 2012-03-06 16:45:07
事实上,这一切都取决于图书馆的人已经在使用,如果他们需要跨平台兼容性 – ikku100 2015-02-16 10:32:32
在多平台源代码中,我通常使用Qt XML阅读器。
你有3种方式为:
- Qt core QXmlStreamReader - XML阅读Qt的方式
- SAX2 reader - 与内容处理类 标准SAX2读者
- DOM reader - DOM文档阅读器XML节点
如果您只编写Windows软件,则应使用MSXML 6。由于Windows XP SP3 MSXML 6.0是操作系统的一部分。
在Linux上,您应该使用libxml2。
我没有带用C++多年,所以我不能命名一个但谷歌的XML解析器C++,我相信你会找到的东西。 – Dan675 2012-02-27 22:21:12