XML



XMLはVisualStudioでも作成できる。ソリューションエクスプローラーのプロジェクト名を右クリックしメニューから「追加=>新しい項目」を選択して
テンプレートから「XMLファイル」を選択する。テキストエディタで表示されている中ではXML用のスニペットやインテリセンスが機能している

  • スキーマ
XML文書の論理的構造を定義するファイル。プロパティの「スキーマ」からファイル指定できる
一度XMLを書き切ってメニューの「XML => スキーマの作成」でも自動生成できる

  • 拡張子
XML XMLファイル
XSD スキーマファイル


<サンプル1:XNAのコンテンツパイプラインを利用してシリアライズしたデータをXML出力し、そのデータを読み込んで逆シリアライズして読み込む>
WINフォームアプリなどからも利用できる方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//参照追加でパイプラインを使う場合プロジェクトのプロパティ設定からフレームワークを
//「.NET Framework4 Client Profile」から「.NET Framework4」に変更する必要がある
using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate;
using System.Xml;
using System.Drawing;

namespace CSharpXML
{
    class XmlTest1
    {
        //シリアライズで外部出力する際はpublicになっていないと出力されないので注意! 
        public class Enemy
        {
            public string Name { get; set; }
            public Point RespownPosition;
            public bool Show { get; set; }
        }

        public XmlTest1()
        {
            List<Enemy> writeStage = new List<Enemy>()
            {
                new Enemy{Name="enemy1",RespownPosition=new Point(8,16),Show=true},
                new Enemy{Name="enemy2",RespownPosition=new Point(32,64),Show=true},
                new Enemy{Name="boss",RespownPosition=new Point(128,256),Show=false},
            };

            //書き込み処理
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            using (XmlWriter writer = XmlWriter.Create(@"D:\Users\Owner\Documents\Visual Studio 2010\Projects\CSharpXML\CSharpXML\example.xml", settings))
            {
                IntermediateSerializer.Serialize(writer, writeStage, null);
            }

            //読み込み処理
            List<Enemy> readStage;
            using (XmlReader reader = XmlReader.Create(@"D:\Users\Owner\Documents\Visual Studio 2010\Projects\CSharpXML\CSharpXML\example.xml"))
            {
                readStage = IntermediateSerializer.Deserialize<List<Enemy>>(reader, null);
            }
            foreach (var item in readStage){Console.WriteLine("{0}  {1}  {2}", item.Name, item.RespownPosition, item.Show);}
        }
    }
}

こんな感じで出力される
<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:Generic="System.Collections.Generic">
  <Asset Type="Generic:List[CSharpXML.XmlTest1+Enemy]">
    <Item>
      <Name>enemy1</Name>
      <Show>true</Show>
      <RespownPosition>
        <X>8</X>
        <Y>16</Y>
      </RespownPosition>
    </Item>
    <Item>
      <Name>enemy2</Name>
      <Show>true</Show>
      <RespownPosition>
        <X>32</X>
        <Y>64</Y>
      </RespownPosition>
    </Item>
    <Item>
      <Name>boss</Name>
      <Show>false</Show>
      <RespownPosition>
        <X>128</X>
        <Y>256</Y>
      </RespownPosition>
    </Item>
  </Asset>
</XnaContent>
最終更新:2012年05月22日 22:52