TinyXml クイック スタート (1)

著者: Zhu Jincan
ソース: http://blog.csdn.net/clever101

 

      xml ファイルについては、私の現在の作業は構成ファイルのみに焦点を当てており、単純な情報ファイルとして使用されているため、重い xml パーサーである msxml を使用するのは好きではありません。特に、msxml を使用して xml を解析するときに複雑な com 型が含まれている場合はなおさらです。面倒。したがって、単純な xml ファイルの分析には、オープン ソースの TinyXml を使用することを好みます。

 

      まず TinyXml を紹介します。TinyXML は DOM モデルに基づく非常に人気のある XML パーサーです. 使いやすく, 小さくて精巧です. 単純なデータの格納, 構成ファイル, オブジェクトのシリアル化および少量のデータを使用するその他の操作に非常に適しています. そのホームページは次のとおりです. : http://www.grinninglizard.com/tinyxml/ 最新バージョンはバージョン 2.5.3 です。

TinyXml のチュートリアルはオンライン上にたくさんありますが、あまりよく書かれていないと思います (読んだ後に学習していなかったような気がします)。やむを得ず、自分に合う記事を構成するしかないので、それが他の人に適しているかどうかは意見の問題です。xml ファイルの本質は小さなデータベースにあると思います. 別の観点から言えば、データベースに対して行う操作はすべて、xml ファイルに対してすべての操作を実行できる必要があります。一般に、データベースに対する操作には、新しいデータベースの作成、データベースのクエリ、データベースの変更、およびデータベースの削除が含まれます。次に、対応する xml ファイルは、新しい xml ファイルを作成し、xml ファイルで指定されたノードの値を照会し、xml ファイルでノードの値を変更し、xml ファイルでノードの値を削除します。

 

       まず、xmlファイルにはどのような形式があるのか​​を知っておきましょう。以下に、いくつかの一般的な xml ファイル形式を示します。

 

example1.xml: <?xml version="1.0" ?> <Hello>World</Hello> example2.xml: <?xml version="1.0" ?> <poetry> <verse> Alas Great World Alas (再び) < /verse> </poetry> example3.xml: <?xml version="1.0" ?> <shapes> <circle name="int-based" x="20" y="30" r="50" /> <point name="float-based" x="3.5" y="52.1" /> </shapes> example4.xml: <?xml version="1.0" ?> <MyApp> <Messages> <Welcome>ようこそMyApp</Welcome> <Farewell>MyApp をご利用いただきありがとうございます</Farewell> </Messages> <Windows> <Window name="MainFrame" x="5" y="15" w="400" h="250 " /> </Windows> <接続 ip="192.168.0.1" タイムアウト="123.456000" /> </MyApp>

 

      上記の例は、「TinyXML Tutorial Chinese Guide」からの抜粋です。上記に 4 つの例がありますが、xml ファイルのマニフェストをいくつ見たことがありますか? 基本的に 2 つの表現形式があることがわかりました。属性値は、<Window name="MainFrame" x="5" y="15" w="400" h="250" / > のように、山かっこで囲まれています。次の図に示すように、<Welcome>Welcome to MyApp</Welcome> のように、テキストは山かっこの外側にあります。

 

xml 構造体


     example4.xml の複雑さを考慮して、これを例として使用して tinyxml の使用法を紹介します。

 

     Tinyxml は 2 つのコンパイル オプションを使用します。標準の C char * 型を使用するか、STL で std::string を使用します。この場合、プリプロセッサ TIXML_USE_STL が制御に使用されます。つまり、std::string を使用するために TIXML_USE_STL が追加されます。STL とその強力な機能が広く使用されていることを考慮して、以下の std::string の tinyxml 記述を使用します。

まず、VS 2005 を使用して tinyxmlSTL.dsp プロジェクト ファイルを開き、スタティック ライブラリにコンパイルします。デバッグ バージョンは tinyxmld_STL.lib です。次に、tinyxml ライブラリのテストを開始します。私のテスト計画は次のとおりです。最初に tinyxml ライブラリを使用して example4.xml を作成し、次にそれを読み取り、次に指定されたノードの属性またはテキストを照会し、次に example4.xml を変更します (ノード値の一部を変更しますノードの 1 つを削除し、ノードを追加します)、それを読み込んで、変更が成功したかどうかを判断します。具体的には、VS 2005 で新しいコンソール プロジェクトを作成します。テストを行い、コンパイルでマルチバイト文字セットを使用することに注意し、同時に追加します。最初は、xml ファイルを作成するコードです。

 

    /*! * /brief xml ファイルを作成します。* * /param XmlFile xml ファイルのフル パス。* /return 成功か否か。成功の場合は true、失敗の場合は false。*/ bool CreateXml(std::string XmlFile) { // TiXmlDocument クラス ポインターを定義します TiXmlDocument *pDoc = new TiXmlDocument; if (NULL==pDoc) { return false; } TiXmlDeclaration *pDeclaration = new TiXmlDeclaration(_T("1.0" ),_T(""),_T("")); if (NULL==pDeclaration) { return false; } pDoc->LinkEndChild(pDeclaration); // ルート ノードを生成します: MyApp TiXmlElement *pRootEle = new TiXmlElement( _T("MyApp")); if (NULL==pRootEle) { return false; } pDoc->LinkEndChild(pRootEle); // 子ノードを生成: Messages TiXmlElement *pMsg = new TiXmlElement(_T("Messages")); if (NULL==pMsg) { return false; } pRootEle->LinkEndChild(pMsg); // 子ノードを生成: Welcome TiXmlElement *pWelcome = new TiXmlElement(_T("Welcome")); if (NULL==pWelcome) { false を返す; } pMsg-> // 节点Windowの値を設定 pWindow->SetAttribute(_T("name"),_T("MainFrame")); pWindow->SetAttribute(_T("x"),_T("5")); pWindow->SetAttribute(_T("y"),_T("15")); pWindow->SetAttribute(_T("w"),_T("400")); pWindow->SetAttribute(_T("h"),_T("250")); // 生成子节点:Window TiXmlElement *pConnection = new TiXmlElement(_T("Connection")); if (NULL==pConnection) { false を返します。pRootEle->LinkEndChild(pConnection); } // 节点接続の値を設定 pConnection->SetAttribute(_T("ip"),_T("192.168.0.1")); pConnection->SetAttribute(_T("タイムアウト"),_T("123.456000")); pDoc->SaveFile(XmlFile); true を返します。} _T("5")); pWindow->SetAttribute(_T("y"),_T("15")); pWindow->SetAttribute(_T("w"),_T("400")); pWindow->SetAttribute(_T("h"),_T("250")); // 生成子节点:Window TiXmlElement *pConnection = new TiXmlElement(_T("Connection")); if (NULL==pConnection) { false を返します。pRootEle->LinkEndChild(pConnection); } // 节点接続の値を設定 pConnection->SetAttribute(_T("ip"),_T("192.168.0.1")); pConnection->SetAttribute(_T("タイムアウト"),_T("123.456000")); pDoc->SaveFile(XmlFile); true を返します。} _T("5")); pWindow->SetAttribute(_T("y"),_T("15")); pWindow->SetAttribute(_T("w"),_T("400")); pWindow->SetAttribute(_T("h"),_T("250")); // 生成子节点:Window TiXmlElement *pConnection = new TiXmlElement(_T("Connection")); if (NULL==pConnection) { false を返します。pRootEle->LinkEndChild(pConnection); } // 节点接続の値を設定 pConnection->SetAttribute(_T("ip"),_T("192.168.0.1")); pConnection->SetAttribute(_T("タイムアウト"),_T("123.456000")); pDoc->SaveFile(XmlFile); true を返します。

 

 

       上記のルールに気づいたでしょうか?最初に、親ノードは関数 LinkEndChild を使用してバイト ノードに接続します。使用方法は次のとおりです: pParentNode-> LinkEndChild(pChild); 次に、この <Window name="MainFrame" x="5" y のような構造を設定します。 ="15" w="400 " h="250" />SetAttribute 関数を使用します。この関数には 2 つのパラメーターがあり、前者のパラメーターはキーを表し、後者のパラメーターはキーの値を表します。 using MyApp</Farewell> この構造は TiXmlText クラスを採用し、LinkEndChild 関数を使用してリンクします。

 

      上記がxmlファイルを作成するコードで、xmlファイルを読み込むコードを以下に紹介します。xml ファイル全体を出力するコードは非常に単純です。コードは次のとおりです。

 

/*! * /brief xml ファイルを印刷します。* * /param XmlFile xml ファイルのフル パス。* /return 成功か否か。成功の場合は true、失敗の場合は false。*/ bool PaintXml(std::string XmlFile) { // TiXmlDocument クラス ポインターを定義します TiXmlDocument *pDoc = new TiXmlDocument(); if (NULL==pDoc) { return false; } pDoc->LoadFile(XmlFile); pDoc- >Print(); 真を返す; }

   次回は、tinyxml ライブラリを使用して、指定したノードをクエリしたり、指定したノードを削除したり、指定したノードを変更したり、xml ファイルにノードを追加したりする方法を紹介します。

また、数日前に巨大な人工知能学習ウェブサイトを発見しました. 理解しやすく、ユーモラスで、みんなと共有せずにはいられません. [チュートリアルにジャンプ] をクリックします

参照:


1.「TinyXML 入門チュートリアル

 

2. 「Tinyxml の使用上の注意とまとめ

 

3.「TinyXML チュートリアル中国語ガイド

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: blog.csdn.net/clever101/article/details/5334369