前回に続き、今回はTreeViewのラベル名をXMLへ書き出してみます。
こちらに再帰処理で全てのノード名を取得するサンプルが記載されています。
こちらを参考に少しずつ進めてみました。
まずはフォームを用意してあらかじめTreeViewにノードを登録しておきました。

ボタンクリックイベントでルートノードのラベル名をXMLで書き出してみました。
例によって「using System.Xml.Linq;」を先頭に追加するのをお忘れなく。。
private void Form1_Load(object sender, EventArgs e)
{
treeView1.ExpandAll();
}
private void Button1_Click(object sender, EventArgs e)
{
XmlSave();
}
public void XmlSave()
{
var xml = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
XElement 学校;
XElement クラス;
XElement 生徒;
学校 = new XElement("私立ほにゃ高校");
xml.Add(学校);
TreeNodeCollection nodes = treeView1.Nodes;
foreach (TreeNode node in nodes)
{
クラス = new XElement(node.Text);
xml.Root.Add(クラス);
}
textBox1.Text = xml.Declaration.ToString();
textBox1.Text = xml.ToString();
}
うまくいきました。

次にルートノードのひとつ下の階層を<生徒>タグ、そしてさらにその下に<名前>タグの入れ子にしてXMLに書き出してみました。
public void XmlSave()
{
var xml = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
XElement 学校;
XElement クラス;
XElement 生徒;
学校 = new XElement("私立ほにゃ高校");
xml.Add(学校);
TreeNodeCollection nodes = treeView1.Nodes;
foreach (TreeNode node1 in nodes)
{
クラス = new XElement(node1.Text);
xml.Root.Add(クラス);
foreach (TreeNode node2 in node1.Nodes)
{
生徒 = new XElement("生徒");
生徒.Add(new XElement("名前", node2.Text));
クラス.Add(生徒);
}
}
textBox1.Text = xml.Declaration.ToString();
textBox1.Text = xml.ToString();
}
うまくいきました。

いよいよ本番である再帰処理は次の記事にまとめました。