2016-09-15 17 views
0

私はこのコードを使用してXML値を保存して復元していますが、私は困っています。 Rescueは通常、問題を解決し、XMLをロードしようとします。私はこの例外をイメージに入れます。XMLをロードする際の例外

enter image description here

ライン105:文字列テキスト= el.Attribute( "テキスト")値。そのような属性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

'文字列text = el.Attribute( "テキスト")= nullを? el.Attribute( "Text")。値:string.Empty; 'Nullvalue checking ... – stefankmitph

+0

同じ例外、結果はありません。 –

答えて

2

例外は明らかです。値を取得する前に、属性の有無を確認してください。

+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(); 
     } 
関連する問題