web-dev-qa-db-ja.com

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に何か変更があった場合、それを読み取る方法全体を変更する必要があるようです。

これを行うより良い方法はありますか?

11
user974967

あなたのためにそれを行ういくつかのライブラリを使用することができます。 Windowsプラットフォームで作業している場合、 [〜#〜] msxml [〜#〜] を使用できます。これは既にシステムの一部です。

次の質問を確認してください。 C++でXMLファイルを読み書き

他の一般的なライブラリ:xercestinyxmlrapidxml

5
LihO

XMLパーサーが必要になります。そこにはたくさんあります:

私の個人的なお気に入りはpugiXMLですが、それは個人的な好みの問題です。

4
pmr

ブーストプロパティツリーはxmlで非常にうまく機能するので、それを使用します。

1
01100110

マルチプラットフォームのソースでは、通常Qt XMLリーダーを使用します。

次の3つの読み方があります。

  1. QtコアQXmlStreamReader -XML読み取りのQt方法
  2. SAX2リーダー -コンテンツ処理クラスの標準SAX2リーダー
  3. DOMリーダー -XMLノードを備えたDOMドキュメントリーダー

Windows専用のソフトウェアを作成する場合は、MSXML 6を使用する必要があります。WindowsXP SP3 MSXML 6. はOSの一部です。

Linuxでは、 libxml2 を使用する必要があります。

1
Naszta

XMLを解析する機能を備えたPOCOライブラリを使用できます

1