HIRO's.NET

VB.NET, C#, PowerShell Tipsサイト

 VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。

 基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。

HIRO's.NET RSSHIRO's.NET RSS


C# 2005の開発でお困りのことはありませんか?
そんな悩みは当サイトで解決!!

HOME > C# 2005 Tips > コントロール > TreeView Tips メニュー

11.XMLファイルを表示する

UPDATE:2006/11/14 

<< 前のTips  次のTips >>

 

 XMLファイルをツリービューに表示したかったのでMakeTreeという関数を作成しました。この関数を使用すると、指定したXMLファイルの構造そのままをツリービューに表示することができます。

 
サンプル1
private void button1_Click(object sender, EventArgs e)
{
    OpenFileDialog dlgOpen = new OpenFileDialog();

    //ファイルを開くダイアログを表示する
    dlgOpen.Filter = "XMLファイル(*.xml)|*.xml";
    if (dlgOpen.ShowDialog() == DialogResult.OK)
    {
        //XMLファイルを読み込む
        System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
        xmlDoc.Load(dlgOpen.FileName);

        System.Xml.XmlElement xmlRoot = xmlDoc.DocumentElement;
        TreeNode trvRoot = new TreeNode();

        //XMLをツリーノードに変換する
        treeView1.Nodes.Clear();
        MakeTree(xmlRoot, ref trvRoot);

        //XMLをツリービューに変換したノードを追加する
        treeView1.Nodes.Add(trvRoot);
    }
}

/// <summary>
/// XMLをツリーノードに変換する
/// </summary>
/// <param name="xmlParent">変化するXMLデータ</param>
/// <param name="trvParent">変換されたツリーノード</param>
private void MakeTree(System.Xml.XmlElement xmlParent, ref TreeNode trvParent)
{
    if (xmlParent.HasChildNodes)
    {
        for (int i = 0; i < xmlParent.ChildNodes.Count; i++)
        {
            if (xmlParent.ChildNodes[i].GetType().ToString().IndexOf("XmlElement") >= 0)
            {
                System.Xml.XmlElement xmlChild = (System.Xml.XmlElement)xmlParent.ChildNodes[i];
                TreeNode trvChild = new TreeNode();

                trvChild.Text = xmlChild.Name;
                // 子ノードがまだあるか?
                if (xmlChild.HasChildNodes)
                    MakeTree(xmlChild, ref trvChild);
                trvParent.Nodes.Add(trvChild);
            }
            else if (xmlParent.ChildNodes[i].GetType().ToString().IndexOf("XmlText") >= 0)
            {
                TreeNode trvChild = new TreeNode();
                trvChild.Text = xmlParent.ChildNodes[i].InnerText;
                trvParent.Nodes.Add(trvChild);
            }
        }
    }
    //親ノードの設定
    trvParent.Text = xmlParent.Name;
}


 
サンプル2
<?xml version="1.0" encoding="shift_jis"?>
<ADDRESS_DATA>
    <ZIP>012-3456</ZIP>
    <ADDRESS>東京都港区赤坂XXX</ADDRESS>
    <NAME>ひろずどっとねっと</NAME>
</ADDRESS_DATA>