【C#】XMLファイルを入力・出力する方法を解説

C#

はじめに

XMLファイルの入出力を行う方法として、今回は下記3つの方法を使用したXMLファイルの入出力について解説します。

  • System.Xml.Serialization.XmlSerializer
  • System.Xml.XmlTextWriter/System.Xml.XmlTextReader
  • System.Xml.Linq.XElement

System.Xml.Serialization.XmlSerializer

namespaceにusing System.Xml.Serializationが必要です。

XMLシリアライズ、デシリアライズ関数

XMLSerializerを使用したXMLファイルの読込み、出力を行う関数を定義します。

シリアライズするユーザー定義型

XmlSerializerを使用する場合、シリアライズする型を定義します。

今回は以下の様なクラスを定義しました。

XMLファイルのシリアライズ

XMLファイルをシリアライズしてファイルに出力を行うには以下の様に使用します。

以下が出力したファイルの内容です。

XMLファイルのデシリアライズ

XMLファイルのシリアライズで出力した内容をデシリアライズしてユーザー定義型にマッピングするには、以下の様にします。

以下の様に正常にデシリアライズされている事が確認出来ます。

System.Xml.XmlTextWriter/System.Xml.XmlTextReader

namespaceにusing System.Xmlが必要です。

XmlTextWriteでXMLファイル出力

  • Formattingで書式を設定します。
    インデントの有無を指定出来ます。
  • IndentCharではインデント文字を指定します。
    ここではタブを指定しています。
  • Indentationではインデントの数を指定します。
    1を指定しているので、タブ文字が1つインデントに使用されます。
    スペース等、用途に合わせて指定します。
  • WriteStartDocument
    XML宣言を出力します。<?xml version=”1.0″ ~~~?>というやつです。
  • WriteComment
    XMLにコメントを出力します。
    <!– {コメント} –>の様に出力されます。
  • WriteStartElement
    開始要素を出力します。
  • WriteAttributeString
    要素の属性を出力します。
    引数には”属性名”,”値”を指定します。
  • WriteString,WriteValue
    要素の値を出力します。
  • WriteEndElement
    最後に出力した開始要素の終了要素を出力します。
  • WriteEndDocument
    開始している要素、属性を閉じてXmlTextWriterを開始状態に戻します。

以下が出力したXMLファイルです。

XmlTextReaderでXMLファイル読込み

以下がXmlTextWriteで出力したXMLファイルの読込み結果です。

  • Read
    ノードを1つずつ読込みます。
  • NodeType
    要素の種類を判別します。
  • Name
    要素名を取得します。
  • Value
    要素から値を取得します。
  • GetAttribute
    要素から属性を取得します。
    取得する属性のインデックス又は属性名を引数に指定します。

値は文字列で取得されるので、適宜パースする必要があり、正直使いにくいです。

System.Xml.Linq.XElement

System.Xml.Linq.XElementでXMLファイル出力

System.Xml.Linq.XElementを使用してXMLファイルを出力するには以下の様に使用します。

以下が出力したXMLファイルです。

XElementが1つのノードを表しています。

要素に子要素を追加する場合はAddでXElemenを追加すればOKです。

属性を指定する場合は、SetAttributeValueを使用します。

System.Xml.Linq.XElementでXMLファイル読込み

以下が読込み結果です。

まとめ

ごりへいの使い分けとしては、

ユーザー定義型をシリアライズ、デシリアライズする場合はSystem.Xml.Serialization.XmlSerializerを使用。

XMLファイルやXML文字列の解析等はSystem.Xml.Linq.XElementを使用する感じです。
(System.Xml.Linq.XElementでもユーザー定義型のシリアライズ、デシリアライズは出来ます。)

System.Xml.XmlTextWriter/System.Xml.XmlTextReaderは正直使いにくすぎるため、業務で使用した事が1度もありません。

C#プログラミング
凡人プログラマーのブログ

コメント