2012-02-27 49 views
8

私のC++プログラムでXMLファイルを読み込もうとしています。本当に一般的にC++プログラムで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 version="1.0" encoding="utf-8"?> 
<myprogram> 
<configuration> 
<window> 
<height> 300 </height> 
<width> 500 </width> 
</window> 
</configuration> 
</myprogram> 

今私は、XMLファイルを見て、このようにそれを読むことを試みることができます:XMLファイルには、次のようになりますXMLファイルの変更方法を制限します。上記の解決策は非常に手作業であり、XML内の何かが変更された場合、それを読む方法全体が変更されなければならないようです。

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

+0

私は何年もC++を使用していないので、名前は1つではありませんが、GoogleにはC++のxmlパーサーがあり、何かを見つけることができます。 – Dan675

答えて

6

を解析するための機能を持つPOCOライブラリを使用することができます。 Windowsプラットフォームで作業している場合は、すでにシステムの一部であるMSXMLを使用することができます。

チェックこの質問:Read Write XML File In C++

その他の人気のライブラリは:、プロパティツリーは、XMLと非常によく動作します

+0

MSXMLは私が探しているように聞こえるかもしれません。それはWindowsプログラムなので、まずこれを試してみましょう。先端に感謝します。 – user974967

+1

依存関係のないヘッダーのみのライブラリであるため、RapidXmlの投票。 –

0

あなたはあなたがあなたのためにそれを行いますいくつかのライブラリを使用することができますXML

2

ブーストは、私はそれを使用します。

+0

私はBoostがプロパティツリーに使うRapidXmlライブラリをはるかに上回るとは思わない。 Boostを既に使用していない限り、これは単一のヘッダファイル(RapidXml)の代わりに大きな依存関係を追加します。 –

+0

確かに、それらはすべて、人々がすでに使用しているライブラリと、クロスプラットフォームの互換性が必要な場合に依存します。 – ikku100

1

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

あなたが読むために3つの方法があります。

  1. Qt core QXmlStreamReader -
  2. SAX2 readerを読んでXMLのQtの道 -クラス
  3. DOM readerを扱うコンテンツの標準SAX2リーダー - XMLノード
  4. とDOMドキュメントリーダー

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

Linuxの場合はlibxml2を使用してください。

+0

C++ライブラリを持つことができたら、C XMLライブラリで解決するのはなぜですか? – pmr

+0

@pmr:どうしてですか?多くの場合、純粋なCライブラリは高速です。 libxml2は一般的に使用され、通常はマシン上にあるので、もう1つの依存関係を作成しません。 – Naszta

+0

私の経験では、Cライブラリはしばしば慣用的なC++で不思議な気分になり、いくらかのラッピングを必要とし、他のコードや大きなコードベースとあまりうまく統合できません。しかし、それはおそらく非常に主観的です。 – pmr

1

XMLパーサーが必要です。束がそこにあります:あなたはすでに のQtを使用する場合にのみ

  • TinyXML
  • pugiXML
  • POCOは、同様にXMLパーサー(そして多くの)と
  • QtXmlています

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