Come leggere i dati XML da un oggetto Stream in .NET Framework SDK

Traduzione articoli Traduzione articoli
Identificativo articolo: 301228 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

Sommario

In questo articolo viene illustrato come utilizzare la classe XmlTextReader per leggere XML (Extensible Markup Language) da un flusso. Il flusso pu˛ provenire da diverse origini, ad esempio un flusso di byte da un server, un file o una classe TextReader .

Requisiti

Nell'elenco che segue vengono indicati l'hardware, il software, l'infrastruttura di rete e i service pack necessari:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server o Windows NT 4.0 Server
  • Microsoft Visual Studio .NET
In questo articolo si presume la conoscenza dei seguenti argomenti:
  • Terminologia XML
  • Creazione e lettura di file XML

Come leggere i dati XML da un oggetto Stream

  1. Aprire Visual Studio NET..
  2. Creare un nuovo Microsoft Visual Basic (VB) o l'applicazione console in Microsoft Visual C#.

    Nota : nei passaggi che seguono forniscono una descrizione dettagliata come generare l'applicazione. ╚ inoltre possibile passare direttamente al passaggio 10, in cui viene fornito codice completato.
  3. Assicurarsi che il progetto contenga un riferimento allo spazio dei nomi System.XML e System.IO .
  4. Utilizzare l'istruzione IMPORTS lo spazio dei nomi XML in modo che non sia necessario qualificare le dichiarazioni XmlTextReader in tale spazio dei nomi pi¨ avanti nel codice. ╚ necessario utilizzare l'istruzione IMPORTS prima di qualunque altra dichiarazione, come illustrato di seguito:
    codice Visual Basic .NET
    Imports System.Xml
    Imports System.IO
    						
    Visual C# code
    using System.Xml;
    using System.IO;
    						
  5. Creare o recuperare il flusso XML. Un flusso Ŕ una rappresentazione astratta di un input o periferica di output che costituisce l'origine di o di destinazione dei dati (in questo caso, i dati XML). ╚ possibile scrivere e leggere da un flusso che migliore Ŕ visualizzato come un flusso di byte.

    I flussi vengono utilizzati per fornire l'indipendenza dalla periferica e pertanto non richiedono nessuna modifica del programma, se, ad esempio, modifica l'origine di un flusso. Esistono pochi modi diversi per creare un flusso per la classe XmlTextReader . Selezionare uno degli esempi di codice riportato di seguito per aggiungere la routine Main del modulo predefinito:
    • Esempio di codice che utilizza l'oggetto StringReader :

      L'oggetto di StringReader legge i caratteri da stringhe e accetta un valore di stringa durante la costruzione. Codice Visual Basic .NET
      Dim stream as System.IO.StringReader
      stream = new StringReader("<?xml version='1.0'?>" & _
      "<!-- This file is a book store inventory. -->" & _
      "<bookstore>" & _
      " <book genre=""autobiography"" ISBN=""1-861003-11-0"">" & _
      "   <title>The Autobiography of Benjamin Franklin</title>" & _
      "   <author>" & _
      "       <first-name>Benjamin</first-name>" & _
      "       <last-name>Franklin</last-name>" & _
      "   </author>" & _
      "   <price>8.99</price>" & _
      " </book>" & _
      "</bookstore>")
      						
      Codice C#
      StringReader stream;
      stream = new StringReader("<?xml version='1.0'?>" +
      	"<!-- This file represents a fragment of a book store inventory database. -->" +
      	"<bookstore>" +
      	" <book genre=\"autobiography\" publicationdate=\"1981\" ISBN=\"1-861003-11-0\">" +
      	"   <title>The Autobiography of Benjamin Franklin</title>" +
      	"   <author>" +
      	"       <first-name>Benjamin</first-name>" +
      	"       <last-name>Franklin</last-name>" +
      	"   </author>" +
      	"   <price>8.99</price>" +
      	" </book>" +
      	" <book genre=\"novel\" publicationdate=\"1967\" ISBN=\"0-201-63361-2\">" +
      	"   <title>The Confidence Man</title>" +
      	"   <author>" +
      	"       <first-name>Herman</first-name>" +
      	"       <last-name>Melville</last-name>" +
      	"   </author>" +
      	"   <price>11.99</price>" +
      	" </book>" +
      	"  <book genre=\"philosophy\" publicationdate=\"1991\" ISBN=\"1-861001-57-6\">" +
      	"   <title>The Gorgias</title>" +
      	"   <author>" +
      	"       <name>Plato</name>" +
      	"   </author>" +
      	"   <price>9.99</price>" +
      	" </book>" +
      	"</bookstore>");
      						
    • Esempio di codice che utilizza l'oggetto StreamReader :

      L'oggetto StreamReader viene utilizzato per leggere caratteri da file. Lettura del nome del file per essere letti durante la costruzione: Codice Visual Basic .NET
      Dim stream as System.IO.StreamReader
      ' Loads the XML data in the file books.xml in a new stream.
      stream = New StreamReader ("books.xml")
      						
      Codice C#
      System.IO.StreamReader stream = new System.IO.StreamReader ("books.xml");
      						
      nota che il file di Books.XML viene utilizzato qui. ╚ possibile creare un file Books.XML personalizzato. Un file Books.XML di esempio Ŕ fornito anche con Visual Studio .NET e .NET Framework SDK.

  6. Creare una classe XmlTextReader con il flusso. In genere, si utilizza XmlTextReader se Ŕ necessario accedere al codice XML come dati non elaborati senza l'overhead di DOM (Document Object Model); di conseguenza, XmlTextReader fornisce un meccanismo pi¨ rapido per la lettura del codice XML. XmlTextReader dispone di costruttori diversi per specificare la posizione del codice XML dei dati. Il codice riportato di seguito viene caricato XmlTextReader da un flusso:
    codice Visual Basic .NET
    Dim reader As XmlTextReader = New XmlTextReader (stream)
    						
    C# Code
    XmlTextReader reader = null;	
    reader = new XmlTextReader (stream);
    						
  7. Leggere il codice XML. Una volta caricato, XmlTextReader vengono effettuate letture sequenziali per lo spostamento attraverso i dati XML e utilizza il metodo Read per ottenere di al record successivo. Restituisce false se esistono pi¨ record.
    codice Visual Basic .NET
    Do While (reader.Read())
        ' Do some work here on the data.
        Console.WriteLine(reader.Name)
    Loop
    
    ' Reading of the XML file has finished.
    Console.ReadLine() 'Pause
    						
    C# Code
    while (reader.Read()) 
    {
        // Do some work here on the data.
        ...
    }
    
    while (reader.Read()) 
    {
        // Do some work here on the data.
    	Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    						
  8. Controllare i nodi. Per elaborare i dati XML, ogni record dispone di un tipo di nodo che pu˛ essere determinato dalla proprietÓ NodeType . Il Nome e valore restituiscono il nome di nodo (il nome dell'elemento e attributo) e il valore del nodo (testo del nodo) del nodo corrente (o record). L'enumerazione di tipo di nodo determina il tipo di nodo. Questo esempio visualizza il nome degli elementi e il tipo di documento. Si noti che nell'esempio gli attributi degli elementi vengono ignorati.
    codice Visual Basic .NET
    Do While (reader.Read())
    Select Case reader.NodeType
    Case XmlNodeType.Element 'Display beginning of element.
    Console.Write("<" + reader.Name)
    Console.WriteLine(">")
    Case XmlNodeType.Text 'Display the text in each element.
    Console.WriteLine(reader.Value)
    Case XmlNodeType.EndElement 'Display end of element.
    Console.Write("</" + reader.Name)
    Console.WriteLine(">")
    End Select
    Loop
    						
    C# Code
    while (reader.Read()) 
    {
        switch (reader.NodeType) 
        {
            case XmlNodeType.Element: // The node is an Element.
                Console.Write("<" + reader.Name);
       Console.WriteLine(">");
                break;
      case XmlNodeType.Text: //Display the text in each element.
                Console.WriteLine (reader.Value);
                break;
      case XmlNodeType. EndElement: //Display end of element.
                Console.Write("</" + reader.Name);
       Console.WriteLine(">");
                break;
        }
    }
    						
  9. Controllare gli attributi. I tipi di nodo degli elementi possono comprendere un elenco di nodi di attributi associati. Il metodo MovetoNextAttribute consente di passare in modo sequenziale da un attributo nell'elemento. Utilizzare la proprietÓ HasAttributes per verificare se il nodo possiede attributi. La proprietÓ AttributeCount restituisce il numero di attributi per il nodo corrente.
    codice Visual Basic .NET
    Do While (reader.Read())
    Select Case reader.NodeType
    Case XmlNodeType.Element 'Display beginning of element.
    Console.Write("<" + reader.Name)
             If reader.HasAttributes Then 'If attributes exist
             	While reader.MoveToNextAttribute() 
    					'Display attribute name and value.
    Console.Write(" {0}='{1}'", reader.Name, reader.Value)
    End While
    End If
    Console.WriteLine(">")
    Case XmlNodeType.Text 'Display the text in each element.
    Console.WriteLine(reader.Value)
    Case XmlNodeType.EndElement 'Display end of element.
    Console.Write("</" + reader.Name)
    Console.WriteLine(">")
    End Select
    Loop
    						
    C# Code
    while (reader.Read()) 
    {
        switch (reader.NodeType) 
        {
            case XmlNodeType.Element: // The node is an Element.
                Console.Write("<" + reader.Name);
    
                while (reader.MoveToNextAttribute()) // Read attributes.
                    Console.Write(" " + reader.Name + "='" + reader.Value + "'");
                Console.Write(">");
       Console.WriteLine(">");
                break;
      case XmlNodeType.Text: //Display the text in each element.
                Console.WriteLine (reader.Value);
                break;
      case XmlNodeType. EndElement: //Display end of element.
                Console.Write("</" + reader.Name);
       Console.WriteLine(">");
                break;
        }
    }
    						

  10. Codice completato viene fornito di seguito per comoditÓ.
    Codice di Visual Basic.NET
    Imports System.Xml
    Imports System.IO
    Module Module1
    
        Sub Main()
            Dim stream As System.IO.StreamReader
            ' Loads the XML data in the file books.xml in a new stream.
            stream = New StreamReader("books.xml")
            Dim reader As XmlTextReader = New XmlTextReader(stream)
            Do While (reader.Read())
                Select Case reader.NodeType
                    Case XmlNodeType.Element 'Display beginning of element.
                        Console.Write("<" + reader.Name)
                        If reader.HasAttributes Then 'If attributes exist
                            While reader.MoveToNextAttribute()
                                'Display attribute name and value.
                                Console.Write(" {0}='{1}'", reader.Name, reader.Value)
                            End While
                        End If
                        Console.WriteLine(">")
                    Case XmlNodeType.Text 'Display the text in each element.
                        Console.WriteLine(reader.Value)
                    Case XmlNodeType.EndElement 'Display end of element.
                        Console.Write("</" + reader.Name)
                        Console.WriteLine(">")
                End Select
            Loop
        End Sub
    
    End Module
    						

    Codice C#
    using System;
    using System.Xml;
    using System.IO;
    namespace ReadXMLFromStream
    {
    	/// <summary>
    	/// Summary description for Class1.
    	/// </summary>
    	class Class1
    	{
    		static void Main(string[] args)
    		{
    
    			System.IO.StreamReader stream = new System.IO.StreamReader ("books.xml");
    			XmlTextReader reader = null;	
    			reader = new XmlTextReader (stream);
    			while (reader.Read()) 
    			{
    				switch (reader.NodeType) 
    				{
    					case XmlNodeType.Element: // The node is an Element.
    						Console.Write("<" + reader.Name);
    
    						while (reader.MoveToNextAttribute()) // Read attributes.
    							Console.Write(" " + reader.Name + "='" + reader.Value + "'");
    						Console.Write(">");
    						Console.WriteLine(">");
    						break;
    					case XmlNodeType.Text: //Display the text in each element.
    						Console.WriteLine (reader.Value);
    						break;
    					case XmlNodeType. EndElement: //Display end of element.
    						Console.Write("</" + reader.Name);
    						Console.WriteLine(">");
    						break;
    				}
    			}
    
    		}
    	}
    }
    
    						
  11. Effettuare la generazione, quindi eseguire il progetto.

Riferimenti

Per ulteriori informazioni, vedere la "XML in Microsoft. NET: .NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation" articolo di MSDN Magazine il seguente sito Web Microsoft:
http://msdn.microsoft.com/msdnmag/issues/01/01/xml/default.aspx
Per ulteriori informazioni sulle classi di StringReader , StreamReader e XmlReader , vedere Microsoft .NET Framework Class Library documentazione.

Per ulteriori informazioni sull'utilizzo di XmlReader per leggere i dati XML, vedere Microsoft .NET Framework Developer Guide della documentazione.

ProprietÓ

Identificativo articolo: 301228 - Ultima modifica: giovedý 15 luglio 2004 - Revisione: 3.4
Le informazioni in questo articolo si applicano a:
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework Class Libraries 1.1
Chiavi:á
kbmt kbhowtomaster KB301228 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 301228
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com