Xmlを使いませう

今回はXMLについて書こうかと思います。

XMLとは簡単に説明しますと、文章やデータなどに意味や構造を記述するための言語のひとつです。

<Students>
   <太郎>
       <Name>太郎</Name>
       <Age>18</Age>
       <Birthday>xxxx年xx月xx日</Birthday>
       <Height>170</Height>
       <Weight>70</Weight>
   </太郎>
   <次郎>
       <Name>次郎</Name>
       <Age>18</Age>
       <Birthday>xxxx年xx月xx日</Birthday>
       <Height>172</Height>
       <Weight>75</Weight>
   </次郎>
</Students>

タグと呼ばれるものでとにかく囲んでいくものです。

もっと詳しく知りたい方はお調べいただけると幸いです。

ゲームプログラムでは、外部からの取得データはバイナリと呼ばれる機械語に
変換してしまうので値の確認が難しくなります。
しかし、バイナリ出力する際に同時にXMLファイルを出力すると
値の確認が容易に行うことができます。
(もちろんXMLでなくてもいいのですが個人的にはお勧めです。就職するとき面接で
「XML形式でデータの管理をするのはとてもよいです」と評価されましたし)

c++版


c#版


この二つの実行結果は同じXMLを吐き出すようになっています。

<?xml version="1.0" encoding="utf-8"?>
<TestClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <Message>テストです。</Message>
 <Bones>
   <Bone BoneName="parts">
     <BoneID>0</BoneID>
     <ParentID>-1</ParentID>
   </Bone>
   <Bone BoneName="parts">
     <BoneID>1</BoneID>
     <ParentID>0</ParentID>
   </Bone>
   <Bone BoneName="parts">
     <BoneID>2</BoneID>
     <ParentID>1</ParentID>
   </Bone>
   <Bone BoneName="parts">
     <BoneID>3</BoneID>
     <ParentID>2</ParentID>
   </Bone>
 </Bones>
</TestClass>

かなり適当なソースコードですが簡単にXMLを出力する方法のひとつだと思われます。

c++版はVisualStudioでは
プロジェクト->プロパティ->構成プロパティ->全般->共通言語ランタイム サポートを [共通言語ランタイム サポート (/clr)]
にすればコンパイルすることができます。



最後に私の体験談としてはXMLでデータを管理していたのはよかったのですが、
実際の作品内ではバイナリデータではなくXMLでモデルデータ等を読み込んでいました。

面接時に「バイナリデータにしていればさらによかったですね」といわれました。

テキストデータは管理用、実際に使用するデータはバイナリにすることをお勧めします。



ハヤブサさん
書き換えが自由にされないようにするためにもバイナリが良いようだね。

ですね!また、読み込みの速さとデータ量の軽さが売りだね

管理人さん
[XmlAttributeAttribute("BoneName")]←これは何?C#特有の機能かなんかですか?

【属性】と呼ばれるもので、.NET特有の記述みたいです。簡単に説明しますと
構造体、クラスに直接情報を加えることで例えば、

内部の人間に公開する情報と外部の人に公開する情報を
プログラムで制御するのではなく、属性から判断して公開情報を決められる

といったものです。

XMLの場合ですと

public struct Dummy
{
  [XmlIgnore()]
  int num;     // XMLに出力しない
  string name; // XMLに出力される
  int id;      // XMLに出力される
};

こんな感じです。

属性はXMLだけではありませんので調べてみるとたくさん出てきます。
属性を使いこなせると情報系などではかなり楽になる可能性大です!

String^ Name;←Stringについてる^は何?

C++/CLI版のString* Name(ポインタ)みたいなものです。
中身の構造がどうなっているのかよくわかりませんが

String^ Name = gcnew String( "太郎" );

gcnew 演算子は CLR の管理下のマネージメモリを確保し、新しく作成したオブジェクトのハンドルを返す。
戻り値はポインタではなくハンドルであるそうです。
オブジェクトの参照がなくなるとガベージコレクションをするみたいです。

CLRとはマイクロンフトが提唱するプラットフォームごとに
共通のクラスライブラリ、ガーベジコレクション等のサービスを提供するという
Java仮想マシンっぽいものです。

今回のコードも似たような形になっているのがわかるかと思います。


ハヤブサのコメント
↑IT系でも読み込み用のデータはバイナリを使うよ
やはり書き換えが自由にされないようにするためにもバイナリが良いようだね。

管理人です.
[XmlAttributeAttribute("BoneName")]←これは何?C#特有の機能かなんかですか?
String^ Name;←Stringについてる^は何?
最終更新:2008年09月06日 01:24
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。