Redazione
a- a+

Leggere file XML con ASP.NET

Vediamo come interagire con i file XML programmando in ASP.NET . Esempi e codici.

Uno degli argomenti che capita di affrontare programmando in ASP.NET è quello di dovere avere a che fare con i file XML. Rispetto all’HTML, l’XML ha uno scopo ben diverso: mentre il primo definisce una grammatica per la descrizione e la formattazione di pagine web e, più in generale, di ipertesti, il secondo è un metalinguaggio utilizzato per  creare documenti strutturati. Mentre l’HTML ha un insieme ben definito e ristretto di tag, con l’XML è invece possibile definirne di propri a seconda delle esigenze ed è molto utilizzato come mezzo per l’esportazione di dati tra diversi DBMS, per scambio di notizie (RSS) e import ed export di dati (WEBServices). Sorge quindi il problema di come poter leggere e trattare tali file in applicazioni ASP.NET.

.NET framework provvede un nuovo e potente modo per effettuare il parsing di file XML offrendo una serie di classi:

XmlReader, XmlTextReader, XmlDocument, XmlSerializer, DataSet e  XpathDocument. 

Partiamo da un semplice file XML:

< ?xml version="1.0" encoding="utf-8"?>
<padre attributo="valore dell’attrubuto">
    <figlio tipo="figlio">
        Ciao Mondo!!!
    </figlio>
</padre>

La classe XmlReader è una classe astratta nello spazio dei nomi System.Xml che fornisce velocemente l’accesso ad un documento XML. La classe XmlReader supporta la lettura di dati XML da un flusso o file.It defines methods and properties that allow you to move through the data and read the contents of a node. Definisce metodi e proprietà che consentono di spostarsi attraverso i dati e leggere il contenuto di un nodo.

I metodi di tale classe li possiamo qui riassumere:

METODO

DESCRIZIONE

Create Create

Restituisce una nuova istanza di un’implementazione della classe XmlReader.

GetAttribute

Ottiene il valore dell’attributo con l’indice specificato o il nome.

IsStartElement

Verifica se il nodo corrente è un elemento di partenza o di un tag di elemento vuoto.

MoveToAttribute

Sposta l’attributo tramite  l’indice specificato o il nome.

MoveToContent

Verifica se il nodo corrente è un nodo non vuoto, in caso contrario, si sposta il nodo al contenuto successivo oppure alla fine del file.

MoveToElement

Muove il puntatore del file all’elemento successivo

MoveToFirstAttribute

Sposta il puntatore al primo attributo del nodo.

MoveToNextAttribute

Sposta il puntaotre all’attributo successivo nel nodo.

Read Read

Reads the next node in the stream. Legge il nodo successivo nel flusso.

ReadInnerXml

Restituisce tutti i contenuti XML nel nodo corrente e tutti i suoi figli. I nodi di inizio e fine sono esclusi.

ReadOuterXml

Restituisce tutti i contenuti XML del nodo corrente e tutti i suoi figli.

Skip Skip

Ignora gli elementi figlio del nodo corrente.

Il codice in ASP.NET per poter aprire e leggere il file XML è il seguente:

Private Sub parsingReadXml()
        Dim xmR As XmlReader
                xmR = XmlReader.Create("C:ciao_mondo.xml")
                xmR.ReadToFollowing("padre") ‘leggo il tag padre
                xmR.MoveToAttribute("attributo") ‘leggo il suo attributo
                tmpVal=xmR.Value ‘memorizzo il valore nella variabile tmpVal
                xmR.ReadToFollowing("figlio") ‘mi sposto sul tag figlio
End Sub

La classeXmlTextReader accede ai dati XMLin modo sequenziale e in sola lettura. Inoltre XmlTextReader non può controllare la validità del documento XML rispetto a un DTD specifico. Questa classe è utile per leggere file XML relativamente semplici.

Dato il seguente file XML

<?xml version="1.0" encoding="UTF-8"?>
<famiglia>
  <persona sesso="maschile">
    <nome>Marco</cognome>
    <cognome>Rossi</cognome>
  </persona>
  <persona sesso="femminile">
    <nome>Gianna</nome>
    <cognome>Verdi</cognome>
  </persona>
</famiglia>

il  codice per leggerlo utilizzando la classe XmlTextReader è il seguente:

Imports System.IO
Imports System.Xml
Module ParsingUsingXmlTextReader
Sub Main()
  Dim m_xmlr As XmlTextReader
  ‘Crea il lettore  XML 
  m_xmlr = New XmlTextReader("C:Personafamiglia.xml")
  ‘disabilita gli spazi bianchi in modo da non leggerli
  m_xmlr.WhiteSpaceHandling = WhiteSpaceHandling.NONE
  ‘legge il document xml ed avanzail tag famiglia
  m_xmlr.Read()
  ‘legge il tag famiglia
  m_xmlr.Read()
  ‘ciclo per leggere I nodi
  While Not m_xmlr.EOF
    ‘va al tag persona
    m_xmlr.Read()
    ‘se none siste persona esce dal ciclo
    If Not m_xmlr.IsStartElement() Then
      Exit While
    End If
    ‘ottinene il sesso di persona
    Dim sessoAttribute = m_xmlr.GetAttribute("sesso")
    ‘legge I tag cognomen e nome
    m_xmlr.Read()
    ‘ottiene il valore dell’elemento nome
    Dim nomeValue = m_xmlr.ReadElementString("nome")
    ‘ottiene il valore dell’elemento cognome
    Dim cognomeValue = m_xmlr.ReadElementString("cognome")
    ‘stampa il risultatoa video
    Console.WriteLine("Sesso: " & sessoAttribute _
      & " Nome: " & nomeValue & " Cognome: " _
      & cognomeValue)
    Console.Write(vbCrLf)
  End While
  ‘chiude il parsing
  m_xmlr.Close()
End Sub
End Module

La classe XmlDocument implementa i componenti di base del modello DOM (Document Object Model) di W3C. Il modello DOM è una rappresentazione in memoria (cache) della struttura di un documento XML e consente lo spostamento all’interno di tale documento e la sua modifica. Da considerare che XmlReader e XmlTextReader, a differenza di XmlDocument, eseguono un parsing attraverso uno stream solo in avanti (forward-only). Il vantaggio di leggere un documento in modalità forward-only è la velocità, a scapito, comunque, della rinuncia ad alcune funzionalità che invece possiede XmlDocument.

XmlDocument è sicuramente quello che si usa più spesso quando si deve lavorare con documenti XML. Questa classe rappresenta un vero e proprio documento XML in memoria; espone tutte le proprietà e i metodi che sono necessari per leggere e scrivere il documento.



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Redazione
Ti interessano altri articoli su questo argomento?
Chiedi alla nostra Redazione!