Autor Beitrag
piotr
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Do 05.08.10 13:21 
Hallo,



Ich habe folgendes Problem:

Ich habe eine TreeView-Element welches mit einigen Nodes und ChildNodes gefüllt ist (diese sind immer variabel!).
Jetzt möchte ich diese als .XML-Datei exportieren.

Ich habe im Internet schon unzählige Threads und Tutorials zu diesem Thema gefunden, welche mir aber nicht weitergeholfen haben oder nicht in wpf sondern in WindowsForms programmiert waren.

Wie gehe ich dieses Problem am besten an?
Bitte keine Lösungsvorschläge á la "Rekursiv durch den TreeView arbeiten", sondern am besten mit Quelltext, so bewandert bin ich noch nicht in dieser Programmiersprache.
Habe wirklich schon unzälige Websites mit Lösungen durchgeguckt, herumprobiert, usw. usw., aber bisher hat nichts geklappt, deswegen.

Danke im Voraus
thepioneer
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 15.08.10 11:57 
Hallo piotr

mit dem folgenden Code ist das sehr einfach möglich, die Übergabe ist einen Path (XML-Dokument) und den TreeView:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
using System.Xml;

private XmlDocument xmlDocument;

        private void XmlToTreeView(string path, TreeView treeView)
        {
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(new StringReader(path));
            treeView.Nodes.Clear();
            XmlRekursivImport(treeView.Nodes, xmlDocument.DocumentElement.ChildNodes);
        }

        private void XmlRekursivImport(TreeNodeCollection elem, XmlNodeList xmlNodeList)
        {
            try
            {
                TreeNode treeNode;
                foreach (XmlNode myXmlNode in xmlNodeList)
                {
                    treeNode = new TreeNode(myXmlNode.Attributes["value"].Value);

                    if (myXmlNode.ChildNodes.Count > 0)
                    {
                        XmlRekursivImport(treeNode.Nodes, myXmlNode.ChildNodes);
                    }
                    elem.Add(treeNode);
                }
            }
            catch { }
        }

       public string TreeViewToXml(TreeView treeView)
        {
            xmlDocument = new XmlDocument();
            xmlDocument.AppendChild(xmlDocument.CreateElement("ROOT"));
            XmlRekursivExport(xmlDocument.DocumentElement, treeView.Nodes);
            StringWriter sw = new StringWriter();
            XmlTextWriter tx = new XmlTextWriter(sw);
            xmlDocument.WriteTo(tx);
            tx.Close();
            sw.Close();
            return sw.ToString();
        }

        private XmlNode XmlRekursivExport(XmlNode nodeElement, TreeNodeCollection treeNodeCollection)
        {
            XmlNode xmlNode = null;
            foreach (TreeNode treeNode in treeNodeCollection)
            {
                xmlNode = xmlDocument.CreateElement("TreeViewNode");

                xmlNode.Attributes.Append(xmlDocument.CreateAttribute("value"));
                xmlNode.Attributes["value"].Value = treeNode.Text;


                if (nodeElement != null)
                    nodeElement.AppendChild(xmlNode);

                if (treeNode.Nodes.Count > 0)
                {
                    XmlRekursivExport(xmlNode, treeNode.Nodes);
                }
            }
            return xmlNode;
        }