XMLに目覚めたい

nil
記事: 428
登録日時: 14年前

XMLに目覚めたい

投稿記事 by nil » 13年前

ゲームのデータ管理にスクリプティングと読み込みの比較的の簡単なXMLを採用しようと思いまして、
いろいろパーサを探していたところ、TinyXml2が簡単で使い易いと聞いていろいろ調べながらカチャカチャといじってました。

…………なるほどこれは簡単だ(・∀・)イイ!!

例えばソフトウェアの初期化データを外部ファイルから読み込む時
AppData.xml

CODE:



	
	
	640
	480

XMLTest.cpp

CODE:

#include 
#include "tinyxml2.h"

int main(){
	using namespace std;
	using namespace tinyxml2;

	XMLDocument doc;
	doc.LoadFile( "AppData.xml" );
	if( doc.Error() ){
		cout Attribute( "classname" );
	if( className != nullptr ){
		cout FirstChildElement();
	while( true ){
		if( elem2 == nullptr ) return 0;	//	要素がなくなった時点で終了

		const char* name = elem2->Name();	//	要素名

		if		( strcmp( name, "window" ) == 0 ){
			cout GetText() ) GetText() ) NextSiblingElement();	//	次の要素を取得
	}
}
出力

CODE:

AppData.xml
--------------------------


    
    
    640
    480

--------------------------

クラス名を[class]に設定
ウィンドウモードで起動
スクリーン横幅 :640
スクリーン縦幅 :480
これならゲームのスクリプトとして組み込むこともできそうです。
最後に編集したユーザー nil on 2012年11月30日(金) 16:35 [ 編集 3 回目 ]

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前

Re: XMLに目覚めたい

投稿記事 by h2so5 » 13年前

自分はJSON派ですねー.
XMLはUnicode文字のエスケープが必要ないのがメリットですね.

nil
記事: 428
登録日時: 14年前

Re: XMLに目覚めたい

投稿記事 by nil » 13年前

JSONですか。
調べてみましたが、より単純で簡単な構文ですね!!

(寄り道をすると戻ってこれなさそうなので)今はXMLで頑張ってみますが、ぜひとも手を出してみたいものです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前

Re: XMLに目覚めたい

投稿記事 by h2so5 » 13年前

JSONはWeb関係でよく使われます.
JSON用のライブラリも結構ありますが、boost::property_treeを使うとXMLとJSONとINIをほとんど共通のコードで読み書きできます.

nil
記事: 428
登録日時: 14年前

Re: XMLに目覚めたい

投稿記事 by nil » 13年前

boostにxmlパーサがあるのを知りませんでした。
せっかくなので、boostでもプログラムを書いてみました。
► スポイラーを表示
さすがboostと言いますか……。
恐ろしく簡単です。
少し不満点があるとすれば要素名がわかってないとダメなことですかね(要素名を取得する方法ってあるのでしょうか?調べても出て来ませんでした)。
[追記]
h2so5さんから情報をいただきました。
イテレータを使って回せば要素名も取得できるそうです。

まあ属性で代替出来ないこともないので、困ることはそれほど無さそうですね。
JSONなんかのコードはまだ調べていないのですが、
これとほぼ同じに書けるということは簡単なのでしょうね。

とても手軽なのでゲームの方はこちらを使ってみようと思います。
最後に編集したユーザー nil on 2012年11月30日(金) 23:11 [ 編集 1 回目 ]