C#Programmazione

Dati XML e JSON

XML è un metalinguaggio testuale basato su marcatori per la definizione della struttura dei dati, per questo motivo è supportatto da ogni sistema, piattaforma e linguaggio di programmazione. System.Xml permette direttamente a basso livello, lo standard XPath permette di interrogare e di ricavare informazioni da un documento XML.

Un documento XML è costituito da diversi elementi che a loro volta possono contenere altri elementi, gli elementi possono contenere delle proprietà. I dati sono racchiusi tra i tag di apertura e quello di chiusura:

<veicoli>
<veicolo targa=”AB123CD”>
<marca>Ford</marca>
<modello>Fiesta Titanium</modello>
</veicolo>
<veicolo targa=”EF456GH”>
<marca>Fiat</marca>
<modello>500 hybrid</modello>
</veicolo>
</veicoli>

Da questo esempio che il documento è formato da diversi nodi, il principale è il nodo radice. Un documento XML inizia con la dichiarazione che contiene informazioni sulla versione dello standard utilizzato.

<?xml version=”1.0″ encoding=”UTF-8″>

La classe XmlDocument permette di leggere e salvare documenti XML, in questo esempio si vede come leggere un file oppure una stringa oppure come salvarlo:

XmlDocument doc = new XmlDocument();
doc.Load(filename);
doc.LoadXml(xmlstring);
doc.Save(filename);

Tramite la proprietà DocumentElement possiamo accedere alla radice del documento, mentre FirstChild ricava il primo nodo figlio. La proprietà Attributes permette di ricavare gli attributi mediante il nome o l’indice, accediamo al valore tramite Value.

In questo esempio vediamo come spostarsi e visualizzare i vari dati dei node figli, e il risultato dell’output

XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlElement root = doc.DocumentElement;
XmlNode nodeVeicolo = root.FirstChild;
XmlAttribute attrTarga = nodeVeicolo.Attributes[“targa”];
Console.WriteLine($”{nodeVeicolo.FirstChild.InnerText} Targa: {attrTarga.Value}”);
Console.WriteLine($”Inner: {nodeVeicolo.InnerXml}”);
Console.WriteLine($”Outer: {nodeVeicolo.OuterXml}”);

Questo è l’output

Ford Targa: AB123CD
Inner: <marca>Ford</marca><modello>Fiesta Titanium</modello>
Outer: <veicolo targa=”AB123CD”><marca>Ford</marca><modello>Fiesta Titanium</modello></veicolo>

La proprietà InnerText restituisce il valore dell’elemento oppure lo modifica mentre InnerXml ricava tutti gli elementi figli; OuterXml ricava l’XML comprensivo dell’elemento contenitore. Per passare al nodo successivo usiamo la proprietà NextSibiling.

Possiamo conoscere il tipo di elemento in esame tramite la proprietà NodeType,

fine