C# : Modifier un nœud xml
j'ai ce fichier xml :
<?xml version="1.0" encoding="utf-8"?>
<reminders>
<reminder>
<Title>Alarm1</Title>
<Description>Desc1</Description>
<Time>03/07/2012 10:11AM</Time>
<snooze>1</snooze>
<repeat>None</repeat>
</reminder>
</reminders>
Et je veux modifier la innertext de Alarm1 à une autre valeur, de sorte que j'ai écrit ce code qui fait dupliquer l'intégralité du nœud .
XmlDocument xml = new XmlDocument();
xml.Load("0.xml");
XmlNodeList elements = xml.SelectNodes("//reminders");
foreach (XmlNode element in elements)
{
if (element.InnerText == "Alarm1")
{
XmlNode newvalue = xml.CreateElement("MODIFIED");
element.ReplaceChild(newvalue, element);
xml.Save("0.xml");
}
}
Et a ensuite essayé un autre code :
foreach (XmlElement element in xml.SelectNodes("//reminder"))
{
if (element.InnerText == "Alarm1")
{
XmlNode newvalue = xml.CreateElement("MODIFIED");
element.ReplaceChild(newvalue, element);
xml.Save("0.xml");
}
}
Mais aussi ne fonctionne pas....
EDIT 1 : [trouvé un nouveau code]
XmlDocument xml = new XmlDocument();
xml.Load("0.xml");
foreach (XmlElement element in xml.SelectNodes("//reminder"))
{
foreach (XmlElement element1 in element)
{
if (element.SelectSingleNode("//Title").InnerText == "Alarm1")
{
XmlNode newvalue = xml.CreateElement("MODIFIED");
element.ReplaceChild(newvalue, element1);
xml.Save("0.xml");
}
}
}
Mais la Alarm1 devient
<MODIFIED />
EDIT 2 : [JE L'AI RÉSOLU :D]
Bon voici le code que j'ai pu comprendre :
XmlDocument xml = new XmlDocument();
xml.Load("0.xml");
foreach (XmlElement element in xml.SelectNodes("//reminder"))
{
foreach (XmlElement element1 in element)
{
if (element.SelectSingleNode("//Title").InnerText == "Alarm1")
{
MessageBox.Show(element1.InnerText);
XmlNode newvalue = xml.CreateElement("Title");
newvalue.InnerText = "MODIFIED";
element.ReplaceChild(newvalue, element1);
xml.Save("0.xml");
}
}
}
Je vous remercie de votre aide et merci.
utilisation
vos exemples et de la réponse choisie n'ont rien à voir avec linq
Si vous allez avec EDIT2: mais un
salut , si je dispose de trois rappel nœud , Comment je peux mettre à Jour le second nœud ?
XDocument
, pas XmlDocument
vos exemples et de la réponse choisie n'ont rien à voir avec linq
Si vous allez avec EDIT2: mais un
break;
dans le if
pour éviter unesscessary en bouclesalut , si je dispose de trois rappel nœud , Comment je peux mettre à Jour le second nœud ?
OriginalL'auteur BOSS | 2012-03-08
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Votre
foreach
ligne est tout simplement en parcourant une liste d'éléments appelés "rappels", pas de nœuds enfants.Prendre un coup d'oeil à ce xpath tutoriel pour plus d'informations:
http://www.w3schools.com/xpath/xpath_intro.asp
OriginalL'auteur aaroncatlin
Si vous souhaitez utiliser linq avec xml (je trouve que c'est la meilleure façon), alors vous voudrez utiliser le
System.Xml.Linq
espace de noms. Les classes dans l'espace de nom sont toutes préfixées avec justeX
pasXml
. La fonctionnalité de cet espace de noms est plus récent, mieux et beaucoup plus facile à manipuler avec Linq.Ce code vous donnera une variable,
alarm1
c'est le rappel qui a un titre nœud de "Alarm1."À partir de ce point il n'est pas clair pour moi exactement ce que vous voulez modifier. Si vous voulez juste changer le titre alors ...
OriginalL'auteur Jodrell
OriginalL'auteur Julien
OriginalL'auteur L.B