Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
XmlTextWriter, derivato da XmlWriter, consente di scrivere l'XML in un file, una console, un flusso e in altri tipi di output.Durante la scrittura dell'XML, i metodi eseguono operazioni aggiuntive per creare codice XML in formato corretto.Nella tabella seguente è riportato un elenco di metodi che eseguono operazioni per assicurare che i dati siano in formato corretto.
Metodo |
Descrizione dell'operazione eseguita |
|---|---|
WriteAttributeString |
XmlTextWriter esegue l'escape del contenuto di testo dell'attributo in base al contenuto rilevato. |
WriteString |
XmlTextWriter esegue l'escape dei caratteri speciali, sostituendoli con & < > e delle entità di caratteri numerici, se necessario. |
WriteBase64 |
XmlTextWriter consente di codificare i byte base64, che possono essere letti utilizzando ReadBinary sull'XmlReader. |
Le seguenti attività aggiuntive vengono eseguite da XmlTextWriter per assicurare che l'XML sia in formato corretto:
Assicura che gli elementi XML vengano riportati nell'ordine corretto.Non sarà possibile, ad esempio, scrivere un attributo al di fuori di un elemento, scrivere un blocco CDATA all'interno di un attributo o scrivere più elementi radice.Assicura inoltre che la dichiarazione <?xml sia specificata per prima e che il nodo <!DOCTYPE sia specificato prima dell'elemento radice.
Assicura che il valore e il formato dell'attributo xml:space siano corretti e che il relativo valore sia accettabile in base alla raccomandazione Extensible Markup Language (XML) 1.0 (fourth edition) del World Wide Web Consortium (W3C). Nell'esempio seguente viene illustrato l'utilizzo di un valore valido per l'attributo xml:space nel metodo WriteAttributeString:
w.WriteAttributeString("xml:space", "", "preserve");I valori validi per l'attributo xml:space sono default e preserve.Se l'argomento non è uno di questi valori, verrà generata un'eccezione ArgumentException.
Verifica se una stringa viene utilizzata come parametro (ad esempio Null==String.Empty e String.Empty) e se è conforme alle regole del W3C.
Nella tabella seguente vengono illustrati i metodi e le proprietà aggiuntivi definiti da XmlTextWriter che non sono ereditati o definiti in XmlWriter o che non sono ereditati da Object.
Metodo o proprietà |
Descrizione |
|---|---|
XmlTextWriter |
Viene creata un'istanza di XmlTextWriter, che accetta un nome di file, un flusso o TextWriter.È disponibile un metodo di overload che accetta un parametro aggiuntivo che definisce il tipo di codifica. |
Specifica se sono supportati gli spazi dei nomi.Quando questa proprietà viene impostata su false, le dichiarazioni xmlns non vengono scritte ed è possibile specificare nomi degli elementi contenenti un numero indefinito di due punti. |
|
Definisce se vengono utilizzati i rientri per formattare l'output. |
|
Definisce quale carattere utilizzare per i rientri, quando si esegue un Formatting rientrato. |
|
Definisce il numero di IndentChars da scrivere per ogni livello nella gerarchia quando si esegue un Formatting rientrato. |
|
Definisce il carattere da utilizzare per racchiudere fra virgolette i valori degli attributi.È necessario che sia una virgoletta singola ' o doppia ". |
|
Restituisce il flusso in cui scrive XmlTextWriter.Restituisce null se XmlTextWriter è stato costruito con un TextWriter non derivato da StreamWriter. |
Nell'esempio seguente viene creato un output XML utilizzando XmlTextWriter.
Shared Sub WriteQuote(writer As XmlWriter, symbol As String, price As Double, change As Double, volume As Long)
writer.WriteStartElement("Stock")
writer.WriteAttributeString("Symbol", symbol)
writer.WriteElementString("Price", XmlConvert.ToString(price))
writer.WriteElementString("Change", XmlConvert.ToString(change))
writer.WriteElementString("Volume", XmlConvert.ToString(volume))
writer.WriteEndElement()
End Sub 'WriteQuote
Public Shared Sub Main()
Dim writer As New XmlTextWriter(Console.Out)
writer.Formatting = Formatting.Indented
WriteQuote(writer, "MSFT", 74.125, 5.89, 69020000)
writer.Close()
End Sub 'Main
static void WriteQuote(XmlWriter writer, string symbol,
double price, double change, long volume)
{
writer.WriteStartElement("Stock");
writer.WriteAttributeString("Symbol", symbol);
writer.WriteElementString("Price", XmlConvert.ToString(price));
writer.WriteElementString("Change", XmlConvert.ToString(change));
writer.WriteElementString("Volume", XmlConvert.ToString(volume));
writer.WriteEndElement();
}
public static void Main(){
XmlTextWriter writer = new XmlTextWriter(Console.Out);
writer.Formatting = Formatting.Indented;
WriteQuote(writer, "MSFT", 74.125, 5.89, 69020000);
writer.Close();
}
Output
<Stock Symbol="MSFT">
<Price>74.125</Price>
<Change>5.89</Change>
<Volume>69020000</Volume>
</Stock>
L'input del metodo WriteQuote è il codice del titolo, fornito come tipo di dati string.Il prezzo e il cambio vengono dichiarati come tipo di dati double, mentre il volume come tipo di dati long.Per convertire queste variabili in stringhe, viene utilizzata la classe XmlConvert.Con i metodi di questa classe è possibile convertire tutti i tipi di dati sicuri in stringhe.La classe XmlConvert contiene inoltre metodi che eseguono la conversione inversa, trasformando le stringhe in tipi di dati di Microsoft .NET Framework.Per ulteriori informazioni, vedere Codifica dei caratteri dei nomi XML e conversione dei tipi di dati XML.
Per il codice di esempio in cui viene illustrata la scrittura di codice XML in un file, vedere XmlTextWriter.WriteProcessingInstruction.Per il codice di esempio in cui viene illustrata la scrittura di codice XML sulla console, vedere XmlTextWriter.WriteString.
Nel codice seguente è illustrato come scrivere un elemento che crea <price>19.95</price>:
'Write the price.writer.WriteElementString("price", "19.95")
//Write the price.writer.WriteElementString("price", "19.95");
Nel codice seguente è illustrato come scrivere un attributo che crea <element name="purchaseOrder"/>:
writer.WriteStartElement("element")
writer.WriteAttributeString("name", "purchaseOrder")
writer.WriteEndElement()
writer.WriteStartElement("element");
writer.WriteAttributeString("name", "purchaseOrder");
writer.WriteEndElement();
Il metodo WriteAttributeString scrive gli attributi e le dichiarazioni dello spazio dei nomi
Il metodo WriteAttributeString ha due attività diverse.Una funzione è quella di scrivere gli attributi e associarli a un prefisso dello spazio dei nomi definito dall'utente.La seconda attività è quella di generare le dichiarazioni dello spazio dei nomi.Se vengono scritti gli attributi e se il parametro localname è xmlns, questo metodo creerà una dichiarazione dello spazio dei nomi.
Nell'esempio di codice seguente viene utilizzato il metodo WriteAttributeString per scrivere gli attributi all'interno di un elemento.
'Write the genre attribute.writer.WriteAttributeString("genre", "novel")
'Write the ISBN attribute.writer.WriteAttributeString("ISBN", "1-8630-014")
//Write the genre attribute.writer.WriteAttributeString("genre", "novel");
//Write the ISBN attribute.writer.WriteAttributeString("ISBN", "1-8630-014");
WriteAttributeString, inoltre, esegue l'escape del contenuto di testo dell'attributo in base al contenuto rilevato.Se si utilizzano le virgolette doppie, XmlTextWriter ne esegue l'escape nel contenuto di testo del valore dell'attributo con ".Se si utilizzano le virgolette singole, XmlTextWriter esegue l'escape del contenuto di testo del valore dell'attributo con '.
Per generare le dichiarazioni dello spazio dei nomi, è disponibile un metodo WriteAttributeString di overload che consente all'applicazione di definire una dichiarazione dello spazio dei nomi.Nell'esempio seguente vengono creati due spazi dei nomi predefiniti.Nella prima dichiarazione tutti gli elementi senza prefisso vengono associati alla prima dichiarazione dello spazio dei nomi, mentre qualsiasi elemento dichiarato con un prefisso "po" viene associato alla seconda dichiarazione dello spazio dei nomi.
' Write the default namespace, identified as xmlns with no prefix
writer.WriteAttributeString("xmlns", Nothing, "http://www.w3.org/2000/10/XMLSchema")
' Write a namespace for the purchase order with a prefix of "po"
writer.WriteAttributeString("xmlns", "po", Nothing, "https://contoso.com/po")
// Write the default namespace, identified as xmlns with no prefix
writer.WriteAttributeString("xmlns", null, "http://www.w3.org/2000/10/XMLSchema");
// Write a namespace for the purchase order with a prefix of "po"
writer.WriteAttributeString("xmlns", "po", null, "https://contoso.com/po");
Metodo Close
Il metodo Close verifica che il documento XML sia valido quando il flusso è chiuso.Questo evita che vengano creati documenti XML non validi e garantisce che il codice XML sia in formato corretto.Oltre a chiudere il flusso, il metodo Close chiama anche tutti i metodi WriteEnd<xxx> necessari per chiudere il documento.
Coppie di metodi
I metodi di XmlWriter sono disponibili anche in coppie: WriteStartDocument e WriteEndDocument, WriteStartElement e WriteEndElement e WriteStartAttribute e WriteEndAttribute.Utilizzando questi metodi è possibile, ad esempio, creare elementi o attributi nidificati.Con queste coppie di metodi è possibile creare un documento XML nonché elementi o attributi complessi.
Metodi WriteStartDocument e WriteEndDocument
Il metodo WriteStartDocument scrive l'inizio di un nuovo documento e la dichiarazione XML con l'attributo della versione impostato su "1.0", mentre il metodo WriteEndDocument scrive la fine del documento.Mentre si chiama il metodo WriteStartDocument successivo per iniziare a scrivere il documento successivo, è possibile modificare la formattazione, il rientro e altre proprietà.Il metodo WriteStartDocument riconosce, a livello di programmazione, che viene scritto un documento XML e applica le regole del livello radice.Se non viene utilizzato questo metodo, viene creato un frammento XML che verifica se è il documento è in formato corretto.Le regole del livello radice non sono applicate.Nell'esempio di codice seguente sono illustrati l'inizio e la fine di un documento.
' Write the XML declaration.writer.WriteStartDocument()
...
'Close the document.writer.WriteEndDocument()
// Write the XML declaration.writer.WriteStartDocument();
...// Close the document.writer.WriteEndDocument();
Metodi WriteStartElement e WriteEndElement
La coppia WriteStartElement e WriteEndElement consente di delimitare uno o più elementi.In tutti i metodi WriteStartElement di cui viene eseguito l'override, è necessario specificare il parametro del nome locale per il tag di inizio.Nel codice seguente viene utilizzata la coppia di metodi WriteStartElement e WriteEndElement.
' Write the title.writer.WriteStartElement("title")
writer.WriteString("The Handmaid's Tale")
writer.WriteEndElement()
// Write the title.writer.WriteStartElement("title");
writer.WriteString("The Handmaid's Tale");
writer.WriteEndElement();
Output
<title>The Handmaid's Tale</title>
Il metodo WriteStartElement fornisce una firma del metodo sottoposto a override per consentire al codice di specificare i prefissi dello spazio dei nomi per i propri elementi.Per ulteriori informazioni, vedere Prefissi dello spazio dei nomi degli elementi in XmlTextWriter.
Metodi WriteStartAttribute e WriteEndAttribute
I metodi WriteStartAttribute e WriteEndAttribute sono simili ad altri metodi per scrivere l'inizio e la fine di un documento, ad eccezione del fatto che questi metodi scrivono l'inizio e la fine degli attributi.Il metodo WriteStartAttribute scrive l'inizio dell'attributo, WriteString ne scrive il valore e WriteEndAttribute scrive la fine del tag dell'attributo.Nell'esempio di codice seguente viene utilizzata la coppia di metodi WriteStartAttribute e WriteEndAttribute.
writer.WriteStartAttribute(prefix, "ISBN", "urn:samples")
writer.WriteString("1-861003-78")
writer.WriteEndAttribute()
writer.WriteStartAttribute(prefix, "ISBN", "urn:samples");
writer.WriteString("1-861003-78");
writer.WriteEndAttribute();
Output
<book bk:ISBN="1-861003-78">
WriteStartAttribute dispone di un metodo di overload che consente a un'applicazione di specificare un prefisso dello spazio dei nomi, in modo che sia possibile associare tale prefisso agli attributi da esso scritti.Per ulteriori informazioni, vedere Prefissi dello spazio dei nomi degli attributi in XmlTextWriter.
Vedere anche
Riferimenti
Concetti
Formattazione dell'output XML con XmlTextWriter
Funzioni dello spazio dei nomi all'interno di XmlTextWriter