2011-06-21 26 views
3

私は現在プロジェクトに取り組んでおり、xmlデータを別のポートに送ることができるようにtreeviewをxmlに変換する必要があります。treeviewをxmlに変換するには?

+0

Windowsフォーム、WPF、ASP.NET、...? –

+0

あなたはすでにどのようなコードを試しましたか? –

+0

Windowsフォーム...私は全く新しいです...だから私は研究を行っており、コードは見つかりませんでした。 – james

答えて

5
private void button1_Click(object sender, EventArgs e) 
{ 
    var rootElement = new XElement("root", CreateXmlElement(treeView1.Nodes)); 
    var document = new XDocument(rootElement); 
    document.Save("C:\\1.xml"); 
} 

private static List<XElement> CreateXmlElement(TreeNodeCollection treeViewNodes) 
{ 
    var elements = new List<XElement>(); 
    foreach (TreeNode treeViewNode in treeViewNodes) 
    { 
     var element = new XElement(treeViewNode.Name); 
     if (treeViewNode.GetNodeCount(true) == 1) 
      element.Value = treeViewNode.Nodes[0].Name; 
     else 
      element.Add(CreateXmlElement(treeViewNode.Nodes)); 
     elements.Add(element); 
    } 
    return elements; 
} 
+0

は(treeViewNode.GetNodeCount(true)== 0)に変更する必要があります – mcuw

+0

@mcuw:そうではありません。 (treeViewNode.GetNodeCount(true)== 0)なら、treeViewNode.Nodes [0] = null。したがって、element.Value = treeViewNode.Nodes [0] .Nameはクラッシュを引き起こします。 – JSON

+0

私は既にルートノートを持っているXMLを私のtreeviewに移しているので(このツリービューはrootで始まります)、このコードはエクスポートするたびに別のルートを追加します。特定のノードをツリービューからスキップする方法はありますか(子供は含まない)、エクスポートのルート作成をスキップする方法はありますか? – Dante1986

1
Here is the code snippet : 

    public void exportToXml(TreeView tv, string filename) 
    { 
     sr = new StreamWriter(filename, false, System.Text.Encoding.UTF8); 
     sr.WriteLine("<" + tv.Nodes[0].Text + ">"); 
     foreach (TreeNode node in tv.Nodes) 
     { 
      saveNode(node.Nodes); 
     } 
     //Close the root node 
     sr.WriteLine("</" + tv.Nodes[0].Text + ">"); 
     sr.Close(); 
    } 

    private void saveNode(TreeNodeCollection tnc) 
    { 
     foreach (TreeNode node in tnc) 
     { 

      if (node.Nodes.Count > 0) 
      { 
       sr.Write("<" + node.Text + ">"); 
       saveNode(node.Nodes); 
       sr.WriteLine("</" + node.Text + ">"); 
      } 
      else 
       sr.Write(node.Text); 
     } 
    } 
関連する問題