XML v ASP.NET – úprava dat v C#
V předchozím článku jsem se věnoval popisu metod čtení dat z XML souborů. Tentokrát si ukážeme, jak se data do XML v ASP.NET ukládají a jak se mění. K praktické demonstraci opět využijeme jazyk C#.
Třída XmlWriter
V předchozím článku jsme se zabývali třídou XmlReader, která slouží ke čtení dat ze souboru XML. Třída XmlWriter je naopak rychlý proudový zapisovač dat ve formátu XML. Použití třídy XmlWriter je velice snadné a intuitivní. V praxi je potřeba ztát jen několik metod, které celý dokument vymodelují. Podívejte se na následující výpis:
XmlTextWriter writer = new XmlTextWriter(Sever.MapPath(„doc.xml“));
writer.Formatting = Indented;
writer.Indentation = 2;
writer.WriteStartDocument();
writer.WriteElementString(„jmeno“, „Interval“);
//<jmeno>Interval</jmeno>
writer.WriteComment(„generovano pomoci XmlTextWriter“);
//<!—generovano pomoci XmlTextWriter –>
writer.WriteStartElement(„jmeno“);
//<jmeno>
writer.WriteEndElement();
//uzavira aktualni otevreny uzel
writer.WriteEndDocument();
writer.Flush(); //ulozeni
writer.Close();
Vypsaný kód nepotřebuje příliš mnoho vysvětlování. Na prvním řádku jsme vytvořili novou instanci třídy XmlTextWriter nazvanou příznačně writer
. Zapisovat budeme do souboru doc.xml
. Vcelku nic zajímavého, zajímavé jsou až následující dva řádky:
writer.Formatting = Indented;
writer.Indentation = 2;
Tyto řádky totiž udávají, jak bude výstup strukturován. První říká, že každá úroveň bude odsazena (výchozí hodnota je writer.Formatting = None
), druhý se postará o konkrétní vzdálenost odsazení. Ve výsledku bude každá úroveň odsazena o dva znaky. To je velmi výhodné, pokud bychom totiž generovali XML dokument jenom vytvářením nějaké instance String
s použitím značek XML jako v následujícím výpisu, museli bychom se starat o odsazení sami. Následující způsob je velmi neefektivní a navíc až bolestně náchylný k chybám:
string xmlOut = „“;
xmlOut += „<jmeno>“;
xmlOut += “ <prijmeni>Interval</prijmeni>“;
xmlOut += „</jmeno>“;
Zápis dat pomocí XmlDocument
Dalším způsobem, jak měnit dokumenty XML, je použití typu XmlDocument.Už minule jsme si řekli, co je XmlDocument a jak s XML vstupem pracuje. Bylo vidět, že tato třída nabízí mnohem širší možnosti pro práci s dokumenty XML. Samozřejmě, vždy záleží na konkrétní situaci, ale musím se přiznat, že pro zápis i pro čtení v drtivé většině případů používám právě tuto třídu.
Dále v textu si ukážeme, jak budeme pomocí třídy XmlDocument měnit načtené soubory a přidávat nové uzly. Stejně jako při čtení dokumentů musíme ale nejdříve popsat způsob chápání dokumentu XML z pohledu DOM. Podívejme se na nejčastěji používané metody pro změnu dokumentu XML:
AppendChild(XmlNode child)
– přidá uzel (XmlNode
) na konec seznamu potomků aktuálního uzlu.XmlDocument doc = new XmlDocument();
XmlNode currNode = doc.DocumentElement;
XmlElement newElem=doc.CreateElement(„jmeno“);
newElem.InnerText=“Interval“;
currNode.FirstChild.AppendChild(newElem);CreateAttribute(string prefix, string name, string namespace)
– přetížená metoda, která akceptuje až tři parametry, přičemž parametrname
je základní. Vytvoří atributXmlAttribute
se zadaným názvem. Další parametry představují jmenné prostory (viz dokumentace .NET SDK).CreateElement(string prefix, string name, string namespace)
– taktéž přetížená metoda. VytváříXmlElement
se zadaným názvem. Další parametry opět představují jmenné prostory.CreateNode(XmlNodeType type, string name, string namespace)
– vytváříXmlNode
zadaného typu, názvu a jmenného prostoru.CreateNode(XmlNodeType.Element, „jmeno“, „“);
CreateXmlDeclaration(string version, string encoding, string standalone)
– vytvoří deklaraci dokumentu.RemoveAll()
– odstraní všechny potomky i atributy aktuálního uzlu.RemoveChild(XmlNode child)
– odstraní zadaného potomka.ReplaceChild(XmlNode newchild, XmlNode oldchild)
– nahradí druhý uzel prvním.XmlNode root = doc.DocumentElement;
XmlElement elem = doc.CreateElement(„jmeno“);
elem.InnerText=“Interval“;
root.ReplaceChild(elem, root.FirstChild);
Provedené změny se do souboru zapisují metodou Save(string file)
, tedy například xDoc.Save("doc.xml");
.
Využití v praxi
Výčet a stručný popis nejdůležitějších technik máme za sebou, je čas ukázat si nějaký komplexnější příklad, který nám všechno hezky propojí a předvede. Podívejme se třeba na jednoduchou metodu, která změní hodnotu nějakého uzlu:
public class Settings {
public XmlDocument Change(XmlDocument xDoc, string node, string newValue) {
XmlNode root = xDoc.DocumentElement;
XmlElement newNode = xDoc.CreateElement(node);
newNode.InnerText= newValue;
XmlNode xNode = xDoc.DocumentElement.SelectSingleNode(„descendant::“ + node);
string stri = xNode.Name;
root.ReplaceChild(newNode, xNode);
return xDoc;
}
}
// priklad pouziti nasi tridy a metody
Settings s = new Settings();
XmlDocument xDoc = new XmlDocument();
xDoc.Load(Server.MapPath(„database/settings.xml“));
xDoc = s.Change(xDoc, „jmeno“, „Interval“);
V tomto příkladu není nic, co byste po přečtení článku neměli pochopit. Je to opravdu velmi jednoduchá metoda, použitá výhradně k demonstraci způsobu změny dokumentu. Pracuje správně za předpokladu, že uzel <jmeno>
se v dokumentu vyskytne pouze jednou. Pokud by dokument obsahoval více takových uzlů, metoda by změnila vždy první nalezený. Pro konkrétnější specifikaci by bylo potřeba změnit parametr u metody SelectSingleNode
.
Odkazy a zdroje
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Landing page: Jak vytvořit landing page s vysokým CTR
7. května 2024 -
Aukce CZ domén: Jak vydražit expirovanou CZ doménu?
12. června 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024