連載

.NETで簡単XML

第2回 プログラムでXML文書を作成する

株式会社ピーデー 川俣 晶
2003/03/21

Page1 Page2 Page3


Back Issue
1
XML超入門

XML文書をプログラムから読み書きする方法

 XML文書をプログラムから読み込んだり、書き出したりするには、どうすればよいのだろうか。XML文書はテキスト・データの一種なので、テキスト・データを読み書きする方法を使うことができる。例えば、以下のようなXML文書をファイルに作成したいとしよう。

<?xml version='1.0' ?>
<a>サンプル</a>
作成するXML文書

 それには、Visual Basic .NET(VB.NET)やC#で、次のようなコードを作ればよい。

Dim writer As StreamWriter = New StreamWriter("c:\sample.xml", False, System.Text.Encoding.UTF8)
Try
  writer.WriteLine("<?xml version='1.0' ?>")
  writer.WriteLine("<a>サンプル</a>")
Finally
   writer.Close()
End Try
テキスト・データとしてXML文書を作成する(VB.NET版)

try
{
  writer.WriteLine("<?xml version='1.0' ?>");
  writer.WriteLine("<a>サンプル</a>");
}
finally
{
   writer.Close();
テキスト・データとしてXML文書を作成する(C#版)

 こういうプログラムを使うと考えれば、XML文書を読み書きするといっても、XMLに関して特別なプログラミングの知識は必要ないと思えるかもしれない。しかし、実際にやってみると、それだけではうまくいかない。

 XML文書の書き出しでは、同じような文字列の出力が何度も繰り返されることになるので、コーディングの手間が増える。しかも、わずか1文字の書き間違いによって、XML文書として正しくないファイルが出来上がる危険もある。例えば、タグを閉じる「>」記号を書き落とすだけで、XML文書として正しいものではなくなってしまうのである。この記号はXML文書の中に何度となく出てくるものだ。

 さらに、XML文書の読み込みとなると、話のややこしさは爆発的に増大する。例えば、XMLでは文書の符号化方式としてUTF-8とUTF-16を必須としている。そのほか、シフトJISなどを使用してもよい。これらのすべてに適切に対応するためには、それだけでもかなりのコーディング量が必要である。そのうえ、XMLにはさまざまな機能があるため、単純に「<」記号に出合ったら開始タグと見なす、というようなシンプルなプログラミングだけでは済まない部分がある。これらをすべてきちんと処理すると、相当複雑なプログラムを書かねばならない。XMLを利用する応用プログラムを作成するごとに、これらをコーディングしていては、大いに無駄な手間がかかる。

 そこで、XML文書を読み書きするためには、そのための汎用ライブラリを用意して、それを使うということが行われる。つまり、XML文書を読み書きするプログラムを作成するには、直接ファイルを読み書きするようなコーディングを行うのではなく、ライブラリを呼び出すようにコーディングするということである。

 このようなライブラリは世の中にいろいろある。.NET Frameworkのクラス・ライブラリの中にも複数含まれている。今回と次回にかけて使うのは、その中の1つで、XmlReader/XmlWriterと呼ばれるものである。

XML文書を作成する

 XML文書は、読み込むよりも書き出す方が話としては簡単である。そのため、まずXML文書を作成する方法から説明しよう。

 XML文書を作成する方法はいくつかあるが、今回はSystem.Xml名前空間のXmlTextWriterクラスを使う。このクラスは、ファイルやストリームにXML文書を出力する機能を持つ。このクラスは、抽象クラスのXmlWriterクラスに、それらの対象への出力機能を実装したものである。もし、独自に何か別の対象へ出力したい場合は、XmlWriterクラスを継承して出力機能を実装すればよいことになる。それは応用技ということで話をXmlTextWriterクラスに戻そう。

 XmlTextWriterクラスは、XML文書に記録するさまざまな項目、要素や属性などを出力するメソッドを、記録する順番に呼び出して使う。例えば、要素a、要素b、要素cという3つの要素がその順番で出現するXML文書を出力したい場合は、要素aを出力するメソッド、要素bを出力するメソッド、要素cを出力するメソッドをその順番で呼び出す。この順番どおりというのが、XmlTextWriterクラスの特徴である。次回以降で説明するDOM(Document Object Model)は自由な順番で出力内容を指定できるが、それとは異なるということである。自由度が低い代わりに、メモリの消費量がはるかに少なく、処理もずっと高速である。

 もちろん、出力するメソッドだけで話は終わらない。最初に、コンストラクタの引数で出力先を指定する必要があるし、最後にはCloseメソッドを呼び出して出力先を閉じる必要もある。


 INDEX
  .NETで簡単XML
  第2回 プログラムでXML文書を作成する
  1.XML文書をプログラムから読み書きする方法
    2.XmlTextWriterクラスを使用したサンプル(1)
    3.XmlTextWriterクラスを使用したサンプル(2)
 
インデックス・ページヘ  「連載 :.NETで簡単XML」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間