2012-07-30 2 views
0

J'ajoute une nouvelle case à mon frogramme et je dois enregistrer sa valeur dans le fichier de configuration. Je suis en train de le faire avec le code suivant:Ajouter un élément XML s'il n'existe pas

private void CloseDisconnectedCbx_CheckedChanged(object sender, EventArgs e) 
{ 
    XDocument doc = XDocument.Load(BotsFile); 
    var savedBots = doc.Descendants("SavedBots") 
     .Where(p => p.Element("BotName").Value.ToLower() 
        == SelectBotBox.SelectedItem.ToString().ToLower()) 
     .Elements("CloseDisconnected").FirstOrDefault(); 
    if (savedBots == null) 
    { 
     try 
     { 
      doc.Descendants("SavedBots") 
       .Where(p => p.Element("BotName").Value.ToLower() 
          == SelectBotBox.SelectedItem.ToString().ToLower()) 
       .FirstOrDefault() 
       .Add(new XElement("CloseDisconnected", 
        Convert.ToInt32(CloseDisconnectedCbx.Checked))); 
      doc.Save(BotsFile); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 
} 

Il n'ajoute le nouvel élément, cependant, il ressemble à ceci:

<CloseDisconnected/> VALUE 

Il ne finit jamais la fermeture de l'élément. Est-ce que mon code est faux, ou ai-je oublié quelque chose?

Ce code n'est supposé être déclenché que si l'élément est introuvable dans le fichier XML. Si c'est le cas, le changement sera effectué par un autre bouton.

+0

montrent le code qui ajoute closedisconnected s'il vous plaît – HatSoft

+3

vraiment difficile à lire ces Citations, je pense contribuerait à la lisibilité faible si elle a été divisée à plusieurs lignes (comme valeur de recherche extraite pour séparer variable, un élément à ajouter, etc.). – Giedrius

+0

@HatSoft Le code pour ajouter CloseDisconnected se trouve dans la clause Try. – Rickard

Répondre

0
Check parenthesis in your code 

XElement xElem = new XElement("root"); 
xElem.Add(new XElement("CloseDisconnected", "123")); // generates what you expect 
xElem.Add(new XElement("CloseDisconnected"), "123"); // generates what you see 
+0

Donc, les oneliners ont fait leur mauvais travail :) – Giedrius

+0

@Giedrius Ideed. Leçon apprise: p – Rickard

+0

@ L.B Merci! :) – Rickard

Questions connexes