連載

.NETで簡単XML

第8回 VS.NETでXML Schemaを活用する(動作編)

株式会社ピーデー 川俣 晶
2003/09/27
Page1 Page2 Page3 Page4

 次は書き込んだ情報をXML文書ファイルに出力する方法だが、これはWriteXmlメソッドを使うことで容易に実現できる。ここまでの段階で保存されたファイルの内容は以下のようになる。

<?xml version="1.0" standalone="yes"?>
<住所録 xmlns="http://www.atmarkIT.co.jp/ns/sample/addressBook">
  <個人 ID="A0001">
    <名前>二平二郎</名前>
    <住所>足立区1-2-3</住所>
  </個人>
  <個人 ID="A0002">
    <名前>三陸三郎</名前>
    <住所>板橋区4-5-6</住所>
  </個人>
  <個人 ID="A0003">
    <名前>四日市四郎</名前>
    <住所>江戸川区7-8-9</住所>
  </個人>
</住所録>
WriteXmlメソッドで出力されるファイルresult01.xmlの内容

 見てのとおり、XMLに関する直接的な記述は一切行っていないが、確かに意図する通りのXML文書が得られている。もちろん、スキーマの定義に従った内容になっている。

 さて、さらにサンプル・プログラムの続きを見てみよう、次は、保存したファイルを再度読み込んで編集する例である。

 まず、XML文書の読み込みである。読み込みも、書き出しと同様にReadXmlメソッドで容易に実現できる。しかし、どんなXML文書でも読めるというわけではないことに注意が必要である。スキーマから自動生成されたコードは、スキーマに沿ったXML文書を読み込むことを前提としている。例えば、名前要素の内容を読み書きするために名前プロパティが生成されているが、これは間違いなく名前要素が存在しなければ意味がない機能である。

 次に、書き込まれたデータの変更を見てみよう。住所などのプロパティは書き込みも可能なので、

addressBook2.個人[0].住所 = "大田区13-14-15"

といった代入は問題なく実行でき、データの内容を書き換えることができる。また、サンプル・プログラムにあるように、「Remove個人Row」メソッドを使うことで個人要素を取り除くことができる。

 もう1つ、For Each文によってアクセス可能である例もサンプル・プログラムに追加しておいた。

For Each r As 住所録.個人Row In addressBook2.個人
  Trace.WriteLine(r.ID)
  Trace.WriteLine(r.名前)
  Trace.WriteLine(r.住所)
Next

 この変更結果を保存したファイルは以下のようになる。先ほどのresult01.xmlの内容と比べると、1人分の個人情報が追加され、1人分が削除され、さらに1人の住所が書き換えられていることが分かると思う。

<?xml version="1.0" standalone="yes"?>
<住所録 xmlns="http://www.atmarkIT.co.jp/ns/sample/addressBook">
  <個人 ID="A0001">
    <名前>二平二郎</名前>
    <住所>大田区13-14-15</住所>
  </個人>
  <個人 ID="A0003">
    <名前>四日市四郎</名前>
    <住所>江戸川区7-8-9</住所>
  </個人>
  <個人 ID="A0004">
    <名前>五反田五郎</名前>
    <住所>目黒区10-11-12</住所>
  </個人>
</住所録>
result01.xmlを読み込んで内容を変更し、出力されたファイルresult02.xmlの内容

 さて、ここで作成したデータセットとは、ADO.NETの機能である。ADO.NETはデータベースのための機能だが、XML文書を扱う機能も大々的に取り入れられており、SQL ServerなどのRDBMS抜きでも、活用可能になっているのである。


 INDEX
  .NETで簡単XML
  第8回 VS.NETでXML Schemaを活用する(動作編)
    1.XML文書読み込み時にXML Schemaで内容をチェックする
    2.スキーマからデータセットを作成する(1)
  3.スキーマからデータセットを作成する(2)
    4.データセットを作成できない場合
 
インデックス・ページヘ  「連載 :.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 記事ランキング

本日 月間