2016-09-15 79 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(); 
     }