web-dev-qa-db-fra.com

Modifier le contenu XML existant en C #

Objectif: Je prévois de créer un fichier XML avec XmlTextWriter et de modifier/mettre à jour du contenu existant avec XmlNode SelectSingleNode (), node.ChildNode [?]. InnerText = quelque chose, etc.

Après avoir créé le fichier XML avec XmlTextWriter comme ci-dessous.

XmlTextWriter textWriter = new XmlTextWriter("D:\\learning\\cs\\myTest.xml", System.Text.Encoding.UTF8);

J'ai pratiqué le code ci-dessous. Mais n'a pas réussi à enregistrer mon fichier XML.

XmlDocument doc = new XmlDocument();
doc.Load("D:\\learning\\cs\\myTest.xml");

XmlNode root = doc.DocumentElement;
XmlNode myNode;

myNode= root.SelectSingleNode("descendant::books");

....

textWriter.Close();

doc.Save("D:\\learning\\cs\\myTest.xml");  

J'ai trouvé que ce n'était pas bon de produire comme moi. Y a-t-il une suggestion à ce sujet? Je ne suis pas clair sur les concepts et l'utilisation de XmlTextWriter et XmlNode dans le même projet. Merci pour la lecture et les réponses.

20
Nano HE

Eh bien, si vous voulez mettre à jour un nœud en XML, le XmlDocument est très bien - vous n'avez pas besoin d'utiliser XmlTextWriter.

XmlDocument doc = new XmlDocument();
doc.Load("D:\\build.xml");
XmlNode root = doc.DocumentElement;
XmlNode myNode = root.SelectSingleNode("descendant::books");
myNode.Value = "blabla";
doc.Save("D:\\build.xml");
31
jujusharp

Utilisation de LINQ to xml si vous utilisez le framework 3.5

using System.Xml.Linq;

XDocument xmlFile = XDocument.Load("books.xml"); 
var query = from c in xmlFile.Elements("catalog").Elements("book")    
            select c; 
foreach (XElement book in query) 
{
    book.Attribute("attr1").Value = "MyNewValue";
}
xmlFile.Save("books.xml");
22
Kashan

Formation d'un fichier XML

XmlTextWriter xmlw = new XmlTextWriter(@"C:\WINDOWS\Temp\exm.xml",System.Text.Encoding.UTF8);
xmlw.WriteStartDocument();            
xmlw.WriteStartElement("examtimes");
xmlw.WriteStartElement("Starttime");
xmlw.WriteString(DateTime.Now.AddHours(0).ToString());
xmlw.WriteEndElement();
xmlw.WriteStartElement("Changetime");
xmlw.WriteString(DateTime.Now.AddHours(0).ToString());
xmlw.WriteEndElement();
xmlw.WriteStartElement("Endtime");
xmlw.WriteString(DateTime.Now.AddHours(1).ToString());
xmlw.WriteEndElement();
xmlw.WriteEndElement();
xmlw.WriteEndDocument();  
xmlw.Close();           

Pour modifier les nœuds Xml, utilisez le code ci-dessous

XmlDocument doc = new XmlDocument(); 
doc.Load(@"C:\WINDOWS\Temp\exm.xml"); 
XmlNode root = doc.DocumentElement["Starttime"]; 
root.FirstChild.InnerText = "First"; 
XmlNode root1 = doc.DocumentElement["Changetime"]; 
root1.FirstChild.InnerText = "Second"; 
doc.Save(@"C:\WINDOWS\Temp\exm.xml"); 

Essaye ça. C'est du code C #.

7
Allen George

XmlTextWriter est généralement utilisé pour générer (pas mettre à jour) du contenu XML. Lorsque vous chargez le fichier xml dans un XmlDocument, vous n'avez pas besoin d'un rédacteur distinct.

Mettez simplement à jour le nœud que vous avez sélectionné et .Enregistrez () ce XmlDocument.

6
Hans Kesting