Kawyllainy Vi
Kawyllainy Vi

Reputation: 39

Exception loading the XML

I'm using this code to save and restore the XML values ​​but I'm in trouble . Rescue usually works the problem and when I try to load the XML . I get this exception that in the image.

enter image description here

line 105 : string text = el.Attribute("Text").Value;

        void SaveData() {
            XDocument xmlDocument = new XDocument(new XElement("Pages"));
            List<XElement> xmlPages = new List<XElement>();
            foreach(KeyValuePair<string, string> doc in documents)
                xmlDocument.Root.Add(
                    new XElement("Page",
                    new XAttribute("nodeName", GetNodeName(doc.Key)),
                    new XAttribute("pageGuid", doc.Key),
                    new XAttribute("Rtf", doc.Value)));
            xmlDocument.Root.Add(
                new XElement("TextEdit",
                new XAttribute("Text", textBox1.Text)));
            xmlDocument.Save(GetPathToFile());
        }

        void LoadData() {
            try {
                XDocument xmlDocument = XDocument.Load(GetPathToFile());

                rootNode.Nodes.Clear();
                documents.Clear();

                foreach(XElement el in xmlDocument.Root.Elements()) {
                    string nodeName = el.Attribute("nodeName").Value;
                    string pageGuid = el.Attribute("pageGuid").Value;
                    string rtf = el.Attribute("Rtf").Value;
                    string text = el.Attribute("Text").Value;
                    rootNode.Nodes.Add(new DataNode(nodeName, pageGuid));
                    documents.Add(pageGuid, rtf);
                    textBox1.Text = text;
                }
            } catch(Exception ex) {
                MessageBox.Show("No data loaded. Check XML file" + ex.ToString());
            }
            treeList1.RefreshDataSource();
        }

Upvotes: 0

Views: 280

Answers (2)

Kawyllainy Vi
Kawyllainy Vi

Reputation: 39

After research could solve the case.

Solution:

void LoadData() {
            try {
                XDocument xmlDocument = XDocument.Load(GetPathToFile());

                rootNode.Nodes.Clear();
                documents.Clear();

                foreach(XElement el in xmlDocument.Root.Elements()) {
                    switch(el.Name.LocalName) {
                        case "Page":
                            string nodeName = el.Attribute("nodeName").Value;
                            string pageGuid = el.Attribute("pageGuid").Value;
                            string rtf = el.Attribute("Rtf").Value;

                            rootNode.Nodes.Add(new DataNode(nodeName, pageGuid));
                            documents.Add(pageGuid, rtf);
                            break;
                        case "Text":
                            textEdit1.Text = el.Attribute("text").Value;
                            break;
                    }
                }
            } catch(Exception ex) {
                MessageBox.Show("No data loaded. Check XML file");
            }
            treeList1.RefreshDataSource();
        }

Upvotes: 0

Oscar
Oscar

Reputation: 13980

The exception is clear: There is not such attribute el.Attribute("Text"), so you can't try to get it's value. Check for attribute existence before getting it's value.

Upvotes: 2

Related Questions