C ++でXMLを解析する方法

How Parse Xml C



この記事では、C ++プログラミング言語でXMLを解析する方法について説明します。 C ++のXML解析メカニズムを理解するためのいくつかの実用的な例を見ていきます。

XMLとは何ですか?

XML はマークアップ言語であり、主に組織化された方法でデータを保存および転送するために使用されます。 XMLはeXtensibleMarkupLanguageの略です。 HTMLと非常によく似ています。 XMLはデータの保存と転送に完全に焦点を合わせていますが、HTMLはブラウザにデータを表示するために使用されます。







サンプルXMLファイル/ XML構文

以下にサンプルXMLファイルを示します。



バージョン=「1.0」 エンコーディング='utf-8'?>

>>

student_type='パートタイム'>>

>>トム>>

>>

student_type='フルタイム'>>

>>ドレイク>>

>>

>>

HTMLとは異なり、これはタグ指向のマークアップ言語であり、XMLファイルで独自のタグを定義できます。上記の例では、などのいくつかのユーザー定義タグがあります。すべてのタグには、対応する終了タグがあります。の終了タグです。データを整理するのに必要な数のユーザー定義タグを定義できます。



C ++でのライブラリの解析:

ほとんどの高級プログラミング言語でXMLデータを解析するためのさまざまなライブラリがあります。 C ++も例外ではありません。 XMLデータを解析するための最も一般的なC ++ライブラリは次のとおりです。





  1. RapidXML
  2. PugiXML
  3. TinyXML

名前が示すように、RapidXMLは主に速度に重点を置いており、DOMスタイルの解析ライブラリです。 PugiXMLはUnicode変換をサポートしています。 UTF-16ドキュメントをUTF-8に変換する場合は、PugiXMLを使用することをお勧めします。 TinyXMLは、XMLデータを解析するための最低限のバージョンであり、前の2つと比較してそれほど高速ではありません。仕事をやり遂げたいだけで速度を気にしない場合は、TinyXMLを選択できます。


これで、C ++のXMLおよびXML解析ライブラリの基本を理解できました。次に、C ++でxmlファイルを解析するためのいくつかの例を見てみましょう。



  • 例-1:RapidXMLを使用してC ++でXMLを解析する
  • 例2:PugiXMLを使用してC ++でXMLを解析する
  • 例-3:TinyXMLを使用してC ++でXMLを解析する

これらの各例では、それぞれのライブラリを使用してサンプルXMLファイルを解析します。

例-1:RapidXMLを使用してC ++でXMLを解析する

このサンプルプログラムでは、C ++でRapidXMLライブラリを使用してxmlを解析する方法を示します。入力XMLファイル(sample.xml)は次のとおりです。

バージョン=「1.0」 エンコーディング='utf-8'?>

>>

student_type='パートタイム'>>

>>ジョン>>

>>

student_type='フルタイム'>>

>>ショーン>>

>>

student_type='パートタイム'>>

>>サラ>>

>>

>>

ここでの目標は、C ++を使用して上記のXMLファイルを解析することです。これは、RapidXMLを使用してXMLデータを解析するC ++プログラムです。 RapidXMLライブラリはからダウンロードできます ここ

#含む
#含む
#含む
#include'rapidxml.hpp '

を使用して 名前空間時間;
を使用して 名前空間Rapidxml;


xml_documentdoc
xml_node *root_node= ヌル;

int主要((空所)。
{{
費用 << 'NS生徒のデータ(sample.xml).....を解析しています。 <<endl;

//sample.xmlファイルを読み取ります
ifstream theFile(('sample.xml')。;
ベクター<char>>バッファ((((istreambuf_iterator<char>>((ファイル)。)。、istreambuf_iterator<char>>(()。)。;
バッファ。push_back((' 0')。;

//バッファを解析します
doc。解析する<0>>((バッファ[0])。;

//ルートノードを見つけます
root_node=doc。first_node(('MyStudentsData')。;

//学生ノードを反復処理します
にとって ((xml_node *student_node=root_node->>first_node(('学生')。;student_node;student_node=student_node->>next_sibling(()。)。
{{
費用 << 'NS学生タイプ= ' <<student_node->>first_attribute(('student_type')。->>価値(()。;
費用 <<endl;

//学生の名前を相互作用する
にとって((xml_node *student_name_node=student_node->>first_node(('名前')。;student_name_node;student_name_node=student_name_node->>next_sibling(()。)。
{{
費用 << '学生名=' <<student_name_node->>価値(()。;
費用 <<endl;
}
費用 <<endl;
}

戻る 0;
}

例2:PugiXMLを使用してC ++でXMLを解析する

このサンプルプログラムでは、C ++でPugiXMLライブラリを使用してxmlを解析する方法を示します。入力XMLファイル(sample.xml)は次のとおりです。

バージョン=「1.0」 エンコーディング=「UTF-8」 スタンドアロン='番号' ?>

FormatVersion=「1」>>

>>

名前=「ジョン」 タイプ='パートタイム'>>

>>

名前=「ショーン」 タイプ='フルタイム'>>

>>

名前=「サラ」 タイプ='パートタイム'>>

>>

>>

>>

このサンプルプログラムでは、C ++でpugixmlライブラリを使用してxmlを解析する方法を示します。 PugiXMLライブラリはからダウンロードできます ここ

#含む
#include'pugixml.hpp '

を使用して 名前空間時間;
を使用して 名前空間プギ;

int主要(()。
{{
費用 << 'NS従業員データの解析(sample.xml)....。NSNS';


xml_document doc;

// XMLファイルをロードします
もしも ((doc。load_file(('sample.xml')。)。 戻る -1;

xml_node tools=doc。子供(('EmployeesData')。子供(('従業員')。;


にとって ((xml_node_iterator it=ツール。始める(()。;それ=ツール。終わり(()。; ++それ)。
{{
費用 << '従業員:';

にとって ((xml_attribute_iterator ait=それ->>attributes_begin(()。;所属する=それ->>attributes_end(()。; ++所属する)。
{{
費用 << '' <<所属する->>名前(()。 << '=' <<所属する->>価値(()。;
}

費用 <<endl;
}

費用 <<endl;

戻る 0;

}

例-3:TinyXMLを使用してC ++でXMLを解析する

このサンプルプログラムでは、C ++でTinyXMLライブラリを使用してxmlを解析する方法を示します。入力XMLファイル(sample.xml)は次のとおりです。

バージョン=「1.0」 エンコーディング='utf-8'?>

>>

>>ジョン>>

>>ショーン>>

>>サラ>>

>>

このサンプルプログラムでは、C ++でTinyXMLライブラリを使用してxmlを解析する方法を示します。 TinyXMLライブラリはからダウンロードできます ここ

#含む
#含む
#含む
#include'tinyxml2.cpp '

を使用して 名前空間時間;
を使用して 名前空間tinyxml2;


int主要((空所)。
{{
費用 << 'NS生徒のデータ(sample.xml).....を解析しています。 <<endl;

//sample.xmlファイルを読み取ります
XMLDocumentドキュメント;
doc。LoadFile(( 'sample.xml' )。;

const char*題名=doc。FirstChildElement(( 'MyStudentsData' )。->>FirstChildElement(( '学生' )。->>GetText(()。;
printf(( '学生名:%sNS'、 題名)。;


XMLText*textNode=doc。LastChildElement(( 'MyStudentsData' )。->>LastChildElement(( '学生' )。->>第一子(()。->>ToText(()。;
題名=textNode->>価値(()。;
printf(( '学生名:%sNS'、 題名)。;


戻る 0;
}

結論

この記事では、簡単に説明しました XML そして、C ++でXMLを解析する方法の3つの異なる例を調べました。 TinyXMLは、XMLデータを解析するための最小限のライブラリです。ほとんどのプログラマーは、主にRapidXMLまたはPugiXMLを使用してXMLデータを解析します。