C#.NETメモ:XMLファイルの読み書き

XMLファイルの読み書き方法について簡単にですがメモしておきます。
今回はコード内にコメントを多くしたので、解説は省略します。

下記のXMLファイルのデータを例としての処理方法を記します。

<?xml version="1.0" encoding="euc-jp" standalone="yes"?>
<character>
  <chr animal="熊">フィロ</chr>
  <chr animal="犬">コロ</chr>
  <chr animal="イルカ">ホルー</chr>
</character>

上記のXMLデータを読み込む為には、下記のように、 XmlTextReaderクラスを用います。

string str;
//XMLファイルパス
string xmlFile;
//XMLファイルが存在するか確認
if (File.Exists(xmlFile))
{
    //XMLファイルを開く
    FileStream fStream = new FileStream(xmlFile, FileMode.Open, FileAccess.Read);
    XmlTextReader reader = new XmlTextReader(fStream);

    //XMLファイルを1ノードずつ読み込む
    while (reader.Read())
    {
        reader.MoveToContent();

        //ノード要素にデータがある場合
        if (reader.NodeType == XmlNodeType.Element)
        {
            //ノード要素がある場合(例:<chr animal="熊">フィロ</chr>の「chr」)
            if (reader.LocalName.Equals("chr"))
            {
                //ノードデータを取得(例:<chr animal="熊">フィロ</chr>の「フィロ」)
                str = reader.ReadString();
            }
        }

        //ノードに属性がある場合(例:<chr animal="熊">フィロ</chr>の「animal」)
        if (reader.NodeType == XmlNodeType.Element && reader.HasAttributes)
        {
            //ノード名がある場合
            if (reader.Name == "chr")
            {
                //ノードの属性の数だけループ
                for (int i = 0; i < reader.AttributeCount; i++)
                {
                    //インデックスを属性に移動します
                    reader.MoveToAttribute(i);
                    if (reader.Name == "animal")
                    {
                        //属性データを取得(例:フィロの「熊」)
                        str = reader.Value;
                    }
                }
            }
            //インデックスを要素に移動します
            reader.MoveToElement();
        }
    }
    //XMLファイルを閉じる
    reader.Close();
    fStream.Close();
}


続いて書き込む方法ですが…
書き込みの処理には、XmlTextWriterクラスを用います。

//XMLファイルを開きます
FileStreamfs = new FileStream(xmlFile, FileMode.Create, FileAccess.Write);
XmlTextWriter writer = new XmlTextWriter(fs, Encoding.GetEncoding("EUC-JP"));

//XMLファイルにインデントを入れる
writer.Formatting = Formatting.Indented;

writer.WriteStartDocument(true);

//XSLを指定(ここはXSLが必要な場合だけ入れます)
writer.WriteProcessingInstruction("xml-stylesheet",
            "type=¥"text/xsl¥" href=¥"ico.xsl¥"");

//データ設定
//ノード名を出力
writer.WriteStartElement("character");

    //ノード名を作成します(例:<chr animal="熊">フィロ</chr>の「chrl」)
    writer.WriteStartElement("chr");

    //ノードのテキストを出力(例:<chr animal="熊">フィロ</chr>の「フィロl」)
    writer.WriteString("フィロ");

    //ノード属性を出力(例:<chr animal="熊">フィロ</chr>の「animal="熊"l」)
    writer.WriteAttributeString("animal", "熊");

    //ノードを閉じます
    writer.WriteEndElement();

writer.WriteEndElement();

writer.WriteEndDocument();

//XMLファイルを閉じます
writer.Close();
fs.Close();


コメント
コメントする








    
この記事のトラックバックURL
トラックバック