2016-09-15 2 views
0

Я использую этот код для сохранения и восстановления значений XML, но у меня проблемы. Спасение обычно срабатывает, и когда я пытаюсь загрузить XML. Я получаю это исключение, которое на изображении.Исключение загрузки 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 («Текст»). Значение: string.Empty; 'Проверка нулевого значения ... – stefankmitph

+0

То же исключение, никаких результатов. –

ответ

2

Исключение ясно: Существует не такой атрибут el.Attribute («Текст»), так что вы не можете попытаться получить его значение. Проверьте наличие атрибута, прежде чем получить его значение.

+0

Это xml

+0

Поместите контрольную точку и проверьте значения переменных, когда происходит исключение. – Oscar

+0

В соответствии с отладчиком он не находит текстовое поле в XML, он ассимилирует переменную другого значения вместо текста = «значение» 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(); 
     }