Modificarea documentului XML
Pentru editarea unui document XML (modificarea, adăugarea sau ștergerea elementelor), putem utiliza metodele clasei XmlNode:
- AppendChild: adaugă la sfârșitul nodului curent un nou nod copil
- InsertAfter: adaugă un nou nod după un anumit nod
- InsertBefore: adaugă un nou nod înainte de un anumit nod
- RemoveAll: șterge toate nodurile copii ale nodului curent
- RemoveChild: șterge un nod copil al nodului curent și îl returnează
Clasa XmlDocument adaugă încă o serie de metode care permit crearea de noduri noi:
- CreateNode: creează un nod de orice tip
- CreateElement: creează un nod de tip XmlDocument
- CreateAttribute: creează un nod de tip XmlAttribute
- CreateTextNode: creează un nod de tip XmlTextNode
- CreateComment: creează un comentariu
Vom lua documentul XML people.xml din tema anterioară:
<?xml version="1.0" encoding="utf-8" ?>
<people>
<person name="Tom">
<company>Microsoft</company>
<age>37</age>
</person>
<person name="Bob">
<company>Google</company>
<age>41</age>
</person>
</people>
Vom adăuga în acest document XML un nou element <person>:
using System.Xml;
XmlDocument xDoc = new XmlDocument();
xDoc.Load("people.xml");
XmlElement? xRoot = xDoc.DocumentElement;
// creăm un nou element person
XmlElement personElem = xDoc.CreateElement("person");
// creăm atributul name
XmlAttribute nameAttr = xDoc.CreateAttribute("name");
// creăm elementele company și age
XmlElement companyElem = xDoc.CreateElement("company");
XmlElement ageElem = xDoc.CreateElement("age");
// creăm valorile text pentru elemente și atribut
XmlText nameText = xDoc.CreateTextNode("Mark");
XmlText companyText = xDoc.CreateTextNode("Facebook");
XmlText ageText = xDoc.CreateTextNode("30");
// adăugăm nodurile
nameAttr.AppendChild(nameText);
companyElem.AppendChild(companyText);
ageElem.AppendChild(ageText);
// adăugăm atributul name
personElem.Attributes.Append(nameAttr);
// adăugăm elementele company și age
personElem.AppendChild(companyElem);
personElem.AppendChild(ageElem);
// adăugăm în elementul rădăcină noul element person
xRoot?.AppendChild(personElem);
// salvăm modificările documentului XML în fișier
xDoc.Save("people.xml");
Adăugarea elementelor urmează un șablon. Mai întâi creăm elementul (xDoc.CreateElement("person")). Dacă elementul este complex, adică conține alte elemente, atunci creăm aceste elemente. Dacă elementul este simplu, conținând un text, creăm acest text (XmlText companyText = xDoc.CreateTextNode("Facebook");).
Apoi, toate elementele sunt adăugate în elementul principal person, care este adăugat în elementul rădăcină (xRoot.AppendChild(personElem);).
Pentru a salva documentul modificat pe disc, utilizăm metoda Save: xDoc.Save("people.xml").
După aceasta, în fișierul XML va apărea următorul element:
<?xml version="1.0" encoding="utf-8"?>
<people>
<person name="Tom">
<company>Microsoft</company>
<age>37</age>
</person>
<person name="Bob">
<company>Google</company>
<age>41</age>
</person>
<person name="Mark">
<company>Facebook</company>
<age>30</age>
</person>
</people>
Ștergerea nodurilor
Vom șterge primul nod din documentul XML:
using System.Xml;
XmlDocument xDoc = new XmlDocument();
xDoc.Load("people.xml");
XmlElement? xRoot = xDoc.DocumentElement;
XmlNode? firstNode = xRoot?.FirstChild;
if (firstNode is not null) xRoot?.RemoveChild(firstNode);
xDoc.Save("people.xml");
Acest cod șterge primul nod copil al elementului rădăcină și salvează modificările în fișierul XML.