Home Page Home Page Articoli Il DOM XML

Il DOM XML

Microsoft ha messo a disposizione degli sviluppatori un intero namespace (System.XML) per la manipolazione dei files XML tramite il DOM, vediamo in questo articolo alcuni percorsi per operare facilmente con XML
Autore: Marco Caruso Livello:
Sempre di più XML è parte integrante del .NET Framework e in generale dei sistemi informatici, si pensi solo ai Web Services, vengono incentrati completamente su file XML per poi essere passati tramite il protocollo SOAP. Oppure si pensi ADO.NET che memorizza i dati in formato XML prima di scriverli su Database. Ancora i file di configurazione web.config e app.config sono dei file XML.

Il .NET Framework ci mette a disposizione un intero namespace il System.XML, in questo articolo esamineremo il DOM(Document Object Model), che supporta i componenti di base di livello 1 e di livello 2 del DOM definito dalla W3C. Questo è molto importante perché riusciamo a lavorare con uno standard ben definito.

Che cos?è il DOM?
Il DOM è la rappresentazione in memoria di un documento XML che ci permette di navigarlo e modificarlo.

Andiamo ad analizzare alcune delle classi del DOM:

XMLNODE
Questa è la classe astratta da cui le altre vengono estese, infatti questa classe rappresenta un nodo del file. I file hanno una struttura ad albero composta da un nodo Root e tanti nodi figli.
Il DOM viene implementato attraverso questa classe.

XMLDOCUMENT
Questa Classe rappresenta il documento XML ed estende la XmlNode e con questa classe che si carica il documento in memoria e si salvano le modifiche.

XMLNODELIST
Rappresenta una Collezione di nodi si è visto in un tips precedente la sua utilità quando si eseguono delle ricerche tramite query XPATH.

XMLELEMENT
Rappresenta un oggetto Element del documento.

XMLATTRIBUTE
Rappresenta un'oggetto attributo all'interno di un Element. Estende XMLNODE.

Vediamo più in dettaglio come lavoare con queste classi.
Poniamo l?esempio di avere questo file XML:


<?xml version="1.0" encoding="utf-8" ?>
<Anagrafica>
<Nominativo>Mario Rossi</Nominativo>
<Telefono>0612345678</Telefono>
<Indirizzo>via delle tre fontane</Indirizzo>
<citta>Roma</citta>
</Anagrafica>


Per prima cosa vogliamo leggere il valore all?interno del tag Nominativo:

VB.NET

VB.NET
Dim path As String = "Anagrafica.xml"
'istanzio il documento
Dim Doc As New XmlDocument()
'lo carico in memoria
Doc.Load(path)
'recupero il nodo root
Dim element As XmlElement = Doc.DocumentElement
'recupero il valore all'interno del primo figlio dell'elemento root
Dim node As XmlNode = element.FirstChild
MsgBox(node.InnerText)


C#

string path = "Anagrafica.xml";
//carico il file xml
XmlDocument Doc = new XmlDocument();
Doc.Load("Anagrafica.xml");
//recupero il nodo root
XmlElement element = Doc.DocumentElement;
//recupero il valore all'interno del primo figlio dell'elemento root
XmlNode node = element.FirstChild;
MessageBox.Show(node.InnerText);


Quello che viene svolto è definito nei commenti ed è piuttosto semplice ora vediamo come recuperare tutti i nodi in modo programmatico.

Quindi miglioriamo un po'il nostro esempio iterando sulla collezione di nodi dell'oggetto element:

VB.NET

Dim node As XmlNode
For Each node In element.ChildNodes
MessageBox.Show(node.InnerText)
Next


C#

foreach (XmlNode node in element.ChildNodes)
{
MessageBox.Show(node.InnerText);
}


Con questo esempio si può vedere l'importanza della classe XMLNODE che come detto prima è la base del DOM.

Ora vediamo come aggiungere un nodo.
Continuando con l'esempio:

VB.NET

Dim NodeCap As XmlNode
For Each node In element.ChildNodes
If node.Name.Equals("Indirizzo") Then
'creo il nodo
NodeCap = Doc.CreateNode(XmlNodeType.Element, "CAP", "")
'imposto il valore
NodeCap.InnerText = "00100"
'l'aggiungo al nodo indirizzo
node.AppendChild(NodeCap)
'salvo le modifiche
Doc.Save(path)
End If
Next


C#

XmlNode NodeCap;
foreach (XmlNode node in element.ChildNodes)
{
if (node.Name.Equals("Indirizzo"))
{
//creo il nodo
NodeCap = Doc.CreateNode(XmlNodeType.Element, "CAP", "");
//imposto il valore
NodeCap.InnerText ="00100";
node.AppendChild(NodeCap);
//salvo le modifiche
Doc.Save(path);
}
}


Come vedete per creare un nodo non posso richiamare il suo costruttore essendo una classe astratta, inoltre per creare un nodo si deve richiamare un metodo della XMLDOCUMENT

Doc.CreateNode(XmlNodeType.Element, "CAP", "")
Dove come primo parametro vuole il tipo di elemento da creare(questo parametro fa un riferimento all'enumerazione XmlNodeType), poi si deve passare il nome del tag(nel nostro caso CAP) e infine il namespacURI, che nel nostro caso è blank ma se c?era uno "schema" associato bisognava passarglielo.

Dopo avere creato il nodo ed impostato il valore lo aggiungo al nodo padre
node.AppendChild(NodeCap)

Infine salvo il le modifiche con il metodo Save della classe XMLDOCUMENT(Questo metodo và richiamato solo dopo aver creato o apportato tutte le modifiche al documento).

Ora il nostro file sarà così fatto:


<?xml version="1.0" encoding="utf-8" ?>
<Anagrafica>
<Nominativo>Mario Rossi</Nominativo>
<Telefono>0612345678</Telefono>
<Indirizzo>
via delle tre fontane
<CAP>00100</CAP>
</Indirizzo>
<citta>Roma</citta>
</Anagrafica>


Per ultimo aggiungiamo un'attributo all'elemento Telefono.
Recupero il nodo Telefono e aggiungo l'attributo:

VB.NET

Dim att As XmlAttribute
If node.Name.Equals("Telefono") Then
'creo l'attributo
att = Doc.CreateAttribute("TIPOLOGIA")
'imposto il valore
att.Value = "Casa"
'l'aggiungo al nodo telefono
node.Attributes.Append(att)
'salvo le modifiche
Doc.Save(path)
End If


C#

if (node.Name.Equals("Telefono"))
{
//creo l'attributo
att = Doc.CreateAttribute("TIPOLOGIA");
//imposto il valore
att.Value ="Casa";
// aggiungo l'attributo alla collezione degli attributi del nodo
node.Attributes.Append(att);
//salvo le modifiche
Doc.Save(path);
}


e il tag Telefono sarà così composto:


<Telefono TIPOLOGIA="Casa">0612345678</Telefono>


Conclusioni
Questo articolo voleva fare solo una piccola panoramica sul DOM XML visto quanto è vasto sia nelle classi che nei metodi da utilizzare e ancora di più ai vari sistemi da applicare. Ormai XML è parte integrante di tutti i prodotti Microsoft e i nuovi sistemi che stanno uscendo ne sono la testimonianza quindi conoscere al meglio il DOM è davvero importante.
Voto medio articolo: 3.7 Numero Voti: 20
Marco Caruso

Marco Caruso

Consulente Informatico di Roma, inizia la sua carriera nel 2000 utilizzando la tecnlogia Lotus Notes e il server Domino. Alla fine del 2001 passa alla piattaforma Microsoft.NET dove si appassiona sempre più a questa nuova tecnlogia. Importanti progetti a livello Enterprise per grandi società lo portano a cono... Profilo completo

Articoli collegati

Creare pagine HTML utilizzando XML e XSLT (XML2HTML)
In questo articolo vedremo come creare una pagina HTML "formattata" partendo da un file XML e trasformandolo tramite XSLT. Tutti sapete cosa sia un documento HTML, quasi tutti sapete cosa sia un documento XML ma pochi sanno cosa sia l’ XSLT, cerchiamo, quindi, in poche righe, di capire di cosa stiamo parlando.
Autore: Stefano Passatordi | Difficoltà: | Commenti: 7
XML in SQL Server 2005
Scopriamo come è stato implementato il supporto nativo XML in SQL Server 2005, mostrando anche come è possibile con XQuery gestire e manipolare i dati XML all'interno del Database.
Autore: Marco Caruso | Difficoltà: | Commenti: 2 | Voto:
BLOB in XML
In quest'articolo vedremo come scrivere e leggere Blob(Binary Large Object) in un file XML utilizzando la classe XmlTextWriter e la classe XmlTextReader.
Autore: Marco Caruso | Difficoltà: | Commenti: 1 | Voto:
SOAP Headers e sicurezza nei web services
Hai un web service e non sai se è sicuro? Questo articolo ti illustra uno dei tanti metodi per rendere sicuro il tuo web service, i SOAP Headers.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 2 | Voto:
dotNetHell Contents Web Service
Un nuovo Web Service a disposizione di tutti quelli che desiderano pubblicare i contenuti offerti da dotNetHell (Articoli, News e Tips) nei loro siti Web tramite l'utilizzo di script preconfezionati per ASP Classico, ASP.NET, PHP e Javascript
Autore: David De Giacomi | Difficoltà: | Voto:
Ricerca in un file XML: un Textbox per il tuo sito dinamico
Una soluzione semplice ed elegante per creare un sito Web dinamico consiste nell?utilizzo di XML. Vi mostrerò in questo articolo come implementare un campo di ricerca per i vostri siti basati su XML e .NET.
Autore: Luigi Corrias | Difficoltà: | Commenti: 2
Il calcolo del Codice Fiscale
Mostreremo in questo articolo un algoritmo molto comune; è l'algoritmo che ci permette di calcolare il Codice Fiscale. Oltre a questo dotNetHell mette a disposizione un Web Service che può essere "consumato" (utilizzato) da chiunque liberamente.
Autore: David De Giacomi | Difficoltà: | Commenti: 12 | Voto:
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5