2016-09-15 77 views
0

我正在使用此代码来保存和恢复XML值,但我遇到了麻烦。当我尝试加载XML时,Rescue通常会解决问题。我在图像中得到这个异常。加载XML的异常

enter image description here

线105:串文本= el.Attribute( “文本”)值。

 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(); 
     } 
+0

'字符串文本= el.Attribute( “文本”)=空? el.Attribute(“Text”)。Value:string.Empty;'空值检查... – stefankmitph

+0

同样的异常,没有结果。 –

回答

2

例外情况是清楚的:没有这样的属性el.Attribute(“文本”),所以你不能设法得到它的价值。在获取它的值之前检查属性的存在。

+0

这是xml

+0

发生异常时,放置断点并检查变量的值。 – Oscar

+0

根据调试器,它没有在XML中找到Text字段,他正在同化变量的另一个值而不是Text =“value”XML –

0

经过研究可以解决案件。

!解决方法:

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(); 
     }