C# Programming

Image

XML テキストファイルのリード・ライト


開発環境: Visual Studio 2003
次のような機能のForm アプリケーションを作る。
  • XMLファイルを書き出す。
  • 書き出したファイルを読み込み、RichTextBoxに書き出す。
Image
WRITE 時のヒント
エンコーディングを指定する。 <?xml version="1.0" encoding="utf-8"?>
XmlTextWriter xtw = new System.Xml.XmlTextWriter(dialog.FileName System.Text.Encoding.UTF8);
インデントをつけて書き出す。
xtw.Formatting = Formatting.Indented;
インデント幅の指定
xtw.Indentation = 4;
日付修正履歴
2002/6/22初期バージョン作成

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Xml;

namespace XMLReaderWriter
{
        /// <summary>
        /// Form1 の概要の説明です。
        /// </summary>
        public class Form1 : System.Windows.Forms.Form
        {
                private System.Windows.Forms.Button button1;
                private System.Windows.Forms.Button button2;
                private System.Windows.Forms.RichTextBox richTextBox1;
                /// <summary>
                /// 必要なデザイナ変数です。
                /// </summary>
                private System.ComponentModel.Container components = null;

                public Form1()
                {
                        //
                        // Windows フォーム デザイナ サポートに必要です。
                        //
                        InitializeComponent();

                        //
                        // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。
                        //
                }

                /// <summary>
                /// 使用されているリソースに後処理を実行します。
                /// </summary>
                protected override void Dispose( bool disposing )
                {
                        if( disposing )
                        {
                                if (components != null) 
                                {
                                        components.Dispose();
                                }
                        }
                        base.Dispose( disposing );
                }

                #region Windows Form Designer generated code
                /// <summary>
                /// デザイナ サポートに必要なメソッドです。このメソッドの内容を
                /// コード エディタで変更しないでください。
                /// </summary>
                private void InitializeComponent()
                {
                        this.button1 = new System.Windows.Forms.Button();
                        this.button2 = new System.Windows.Forms.Button();
                        this.richTextBox1 = new System.Windows.Forms.RichTextBox();
                        this.SuspendLayout();
                        // 
                        // button1
                        // 
                        this.button1.Location = new System.Drawing.Point(40, 288);
                        this.button1.Name = "button1";
                        this.button1.TabIndex = 0;
                        this.button1.Text = "Read XML";
                        this.button1.Click += new System.EventHandler(this.button1_Click);
                        // 
                        // button2
                        // 
                        this.button2.Location = new System.Drawing.Point(200, 288);
                        this.button2.Name = "button2";
                        this.button2.TabIndex = 1;
                        this.button2.Text = "Write XML";
                        this.button2.Click += new System.EventHandler(this.button2_Click);
                        // 
                        // richTextBox1
                        // 
                        this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Top;
                        this.richTextBox1.Name = "richTextBox1";
                        this.richTextBox1.Size = new System.Drawing.Size(376, 272);
                        this.richTextBox1.TabIndex = 2;
                        this.richTextBox1.Text = "";
                        // 
                        // Form1
                        // 
                        this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
                        this.ClientSize = new System.Drawing.Size(376, 318);
                        this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                                                                                                  this.richTextBox1,
                                                                                                                                                  this.button2,
                                                                                                                                                  this.button1});
                        this.Name = "Form1";
                        this.Text = "Form1";
                        this.ResumeLayout(false);

                }
                #endregion

                /// <summary>
                /// アプリケーションのメイン エントリ ポイントです。
                /// </summary>
                [STAThread]
                static void Main() 
                {
                        Application.Run(new Form1());
                }

                private void button1_Click(object sender, System.EventArgs e)
                {
                        OpenFileDialog dialog = new OpenFileDialog();
                        DialogResult result = dialog.ShowDialog();
                        if (result == DialogResult.OK)
                        {
                                XmlTextReader xtr = new System.Xml.XmlTextReader(dialog.FileName);
                                this.richTextBox1.Text = "";

                                while(xtr.Read())
                                {
                                        switch (xtr.NodeType)         
                                        {
                                                case XmlNodeType.CDATA: 
                                                        this.richTextBox1.Text += string.Format("<![CDATA[{0}]]>", xtr.Value);           
                                                        break;     
                                                case XmlNodeType.Comment:  
                                                        this.richTextBox1.Text += string.Format("<!-- {0} -->", xtr.Value);  
                                                        break;       
                                                case XmlNodeType.DocumentType:         
                                                        this.richTextBox1.Text += string.Format("<!DOCTYPE {0} [{1}]", xtr.Name, xtr.Value);         
                                                        break;         
                                                case XmlNodeType.Element:
                                                        this.richTextBox1.Text += "<" + xtr.Name; 
                                                        while (xtr.MoveToNextAttribute())
                                                                this.richTextBox1.Text += " " + xtr.Name + "='" + xtr.Value + "'";
                                                        this.richTextBox1.Text += ">";
                                                        break;
                                                case XmlNodeType.EndElement:    
                                                        this.richTextBox1.Text += string.Format("</{0}>", xtr.Name);     
                                                        break;          
                                                case XmlNodeType.EntityReference:     
                                                        this.richTextBox1.Text += string.Format(xtr.Name);         
                                                        break;       
                                                case XmlNodeType.ProcessingInstruction:  
                                                        this.richTextBox1.Text += string.Format("<?{0} {1}?>", xtr.Name, xtr.Value);          
                                                        break;          
                                                case XmlNodeType.Whitespace:      
                                                        this.richTextBox1.Text += xtr.Value; 
                                                        break;         
                                                case XmlNodeType.Text:          
                                                        this.richTextBox1.Text += string.Format(xtr.Value);      
                                                        break;         
                                                case XmlNodeType.XmlDeclaration:         
                                                        this.richTextBox1.Text += string.Format("<?xml version='1.0'?>");  
                                                        break;       
                                                default:
                                                        this.richTextBox1.Text += string.Format("// Unhandled type : {0}", xtr.NodeType.ToString());
                                                        break;
                                        }       
                                }
                        }
                }

                private void button2_Click(object sender, System.EventArgs e)
                {
                        SaveFileDialog dialog = new SaveFileDialog();
                        DialogResult result = dialog.ShowDialog();
                        if (result == DialogResult.OK)
                        {

                                try 
                                {
                                        XmlTextWriter xtw = new System.Xml.XmlTextWriter(dialog.FileName, System.Text.Encoding.UTF8); 
                                        xtw.Formatting = Formatting.Indented;

                                        // Starts a new document 
                                        xtw.WriteStartDocument(); 
                                        xtw.WriteComment("Personal Information"); 
                                        xtw.WriteProcessingInstruction("Instruction","Personal Record"); 

                                        // PersonalData
                                        xtw.WriteStartElement("PersonalData");

                                        // PersonalInfoTable
                                        xtw.WriteStartElement("PersonalInfoTable");
                                        xtw.WriteElementString("ID", "1");
                                        xtw.WriteElementString("名前", "小泉潤一郎");
                                        xtw.WriteElementString("身長", "123");
                                        xtw.WriteEndElement();
                                        // End of PersonalInfoTable
                                        // PersonalInfoTable
                                        xtw.WriteStartElement("PersonalInfoTable");
                                        xtw.WriteElementString("ID", "2");
                                        xtw.WriteElementString("名前", "田中麻希子");
                                        xtw.WriteElementString("身長", "234");
                                        xtw.WriteEndElement();
                                        // End of PersonalInfoTable
                                        
                                        // End of PersonalData
                                        xtw.WriteEndElement();

                                        // EndDocument
                                        xtw.WriteEndDocument(); 
                                        xtw.Close();
                                }
                                catch (Exception exc) 
                                { 
                                        MessageBox.Show(exc.Message,                    // テキスト
                                                exc.GetType().ToString(),                       // キャプション
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Exclamation);
                                } 
                        }
                }
        }
}