.NET Framework XML

Last-modified: 2007-12-31 (月) 16:04:45

XMLの設計

なるべく汎用的に、拡張可能に設計する。
そしてなるべくなら、ノードの深さは一定にする。
長いところや短いところができないようにする。

XMLの操作

ファイルとのやりとり

XMLファイルとのやりとりは全てSystem.Xml.XmlDocumentクラスで行う。

  • ファイルからXMLを読み込むなら、System.Xml.XmlDocument.Load()
  • ファイルへXMLを書き出すなら、System.Xml.XmlDocument.Save()

XmlNode

XMLは、System.Xml.XmlNodeインタフェースによって操作する。
XmlNodeのインスタンスひとつひとつがXMLのタグに相当する。

関数の切り分け

ひとつのタグを処理するのがひとつの関数にする。
たとえば、BODYタグを処理するのは、LoadXML_BODYとか。

チップス

XmlNodeとXmlElementの違い

実質的に同じ。だけど、親子関係がある。フルーツとリンゴの関係に同じ。
つまり、XmlElementは実体化されているが、XmlNodeは実体化されていない。
現在のところ、XmlNodeからXmlElementへのキャストは必ず成功するといって
良いが、今後どうなっていくかはわからない。

XmlDocument.Saveしたけど保存されない

ま、別にXmlDocumentに限ったことではないけど、
XmlDocument.Saveの引数に相対パス(たとえば「./save.xml」など)で
ファイル名を指定した場合、その保存先は以下のようになる。

  1. ファイル保存ダイアログを使っていない→実行ファイルと同じ場所(ただし、IDE上で実行した場合はプロジェクトファイルと同じ場所)
  2. ファイル保存ダイアログを使った→その保存場所に指定したディレクトリと同じ場所。

2つ目は特に盲点になるかと思います。いったん保存先のパスを
デバッガのウィンドウに出力しておくと便利かと思います。

System.Diagnostics.Debug.WriteLine( System.IO.Path.GetFullPath(fname) );

XmlNode and XmlElement: the same...but different