Aggiornamento: novembre 2007
Rappresenta un writer che fornisce un modo veloce, non in cache e di tipo forward-only di generare flussi o file che contengono dati XML conformi alle raccomandazioni W3C Extensible Markup Language (XML) 1.0 e Namespaces in XML.
Assembly: System.Xml (in System.Xml.dll)
Public Class XmlTextWriter _ Inherits XmlWriter
Dim instance As XmlTextWriter
public class XmlTextWriter : XmlWriter
public ref class XmlTextWriter : public XmlWriter
public class XmlTextWriter extends XmlWriter
public class XmlTextWriter extends XmlWriter
Questa classe implementa la classe XmlWriter.
Nota:
|
|---|
|
Nella versione .NET Framework versione 2.0 è consigliabile creare istanze di XmlWriter utilizzando il metodo XmlWriter.Create e la classe XmlWriterSettings. In questo modo è possibile sfruttare completamente tutte le nuove funzionalità introdotte in questa versione. Per ulteriori informazioni, vedere Creazione di writer XML. |
La classe XmlTextWriter mantiene uno stack dello spazio dei nomi corrispondente a tutti gli spazi dei nomi definiti nello stack di elementi corrente. È possibile utilizzare XmlTextWriter per dichiarare manualmente gli spazi dei nomi.
w.WriteStartElement("root");
w.WriteAttributeString("xmlns", "x", null, "urn:1");
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
Il codice C# precedente produce l'output seguente. XmlTextWriter promuove la dichiarazione dello spazio dei nomi nell'elemento di primo livello, al fine di evitarne la duplicazione nei due elementi figlio, il cui prefisso viene ripreso dalla dichiarazione dello spazio dei nomi.
<root xmlns:x="urn:1"> <x:item/> <x:item/> </x:root>
La classe XmlTextWriter consente inoltre di eseguire l'override della dichiarazione dello spazio dei nomi corrente. Nell'esempio seguente l'URI dello spazio dei nomi "123" viene sottoposto a override mediante l'elemento "abc", al fine di produrre l'elemento XML <x:node xmlns:x="abc"/>.
w.WriteStartElement("x","node","123");
w.WriteAttributeString("xmlns","x",null,"abc");
Utilizzando i metodi di scrittura che accettano un prefisso come argomento, è inoltre possibile specificare il prefisso da utilizzare. Nell'esempio seguente due diversi prefissi vengono associati allo stesso URI di spazio dei nomi per produrre il testo XML <x:root xmlns:x="urn:1"><y:item xmlns:y="urn:1"/></x:root>.
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
Se più dichiarazioni dello spazio dei nomi eseguono il mapping di diversi prefissi allo stesso URI dello spazio dei nomi, la classe XmlTextWriter esamina lo stack delle dichiarazioni dello spazio dei nomi precedenti e seleziona il più vicino.
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.Formatting = Formatting.Indented;
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteAttributeString("attr","urn:1","123");
w.WriteEndElement();
w.WriteEndElement();
w.Close();
Nell'esempio del codice C# precedente la chiamata a WriteAttributeString non specifica alcun prefisso; il writer utilizza pertanto l'ultimo prefisso inserito nello stack dello spazio dei nomi e produce il seguente testo XML:
<x:root xmlns:x="urn:1"> <y:item y:attr="123" xmlns:y="urn:1" /> </x:root>
Gli eventuali conflitti tra gli spazi dei nomi vengono risolti dalla classe XmlTextWriter tramite la generazione di prefissi alternativi. Se ad esempio un attributo e un elemento presentano lo stesso prefisso, ma spazi dei nomi differenti, la classe XmlWriter genererà un prefisso alternativo per l'attributo. I prefissi generati vengono denominati n{i}, dove i è un numero maggiore o uguale a 1. Il numero viene reimpostato su 1 per ciascun elemento.
È necessario che gli attributi associati a un URI dello spazio dei nomi presentino un prefisso. Gli spazi dei nomi predefiniti non sono applicabili agli attributi. Ciò è conforme alla sezione 5.2 delle specifiche W3C Namespaces nelle raccomandazioni XML. Se in un attributo viene fatto riferimento all'URI di uno spazio dei nomi, ma non viene specificato un prefisso, il writer genera un prefisso per l'attributo.
Durante la scrittura di un elemento vuoto, uno spazio supplementare viene aggiunto tra il nome di tag e il tag di chiusura, ad esempio <item />, garantendo la compatibilità con le versioni meno recenti dei browser.
Se come parametro per il metodo si utilizza un oggetto String, null e String.Empty sono equivalenti. String.Empty è conforme alle regole W3C.
Per scrivere dati fortemente tipizzati, utilizzare la classe XmlConvert per convertire i tipi di dati in stringa. Il codice C# riportato di seguito consente ad esempio di convertire i dati da Double a String e di scrivere l'elemento <price>19.95</price>.
Double price = 19.95;
writer.WriteElementString("price", XmlConvert.ToString(price));
XmlTextWriter non verifica quanto segue:
-
Caratteri non validi nei nomi degli elementi e degli attributi.
-
Caratteri Unicode non corrispondenti alla codifica specificata. Se i caratteri Unicode non corrispondono alla codifica specificata, l'XmlTextWriter non effettua l'escape dei caratteri Unicode in entità di caratteri.
-
Attributi duplicati.
-
Caratteri contenuti nell'identificatore pubblico DOCTYPE o nell'identificatore di sistema.
Per ulteriori informazioni sulla scrittura di dati XLM, vedere Scrittura di XML con XmlWriter.
Considerazioni sulla sicurezza
Quando si utilizza la classe XmlTextWriter, è opportuno tenere in considerazione gli elementi riportati di seguito.
-
Le eccezioni generate dalla classe XmlTextWriter possono rivelare informazioni sui percorsi che è preferibile non propagare all'applicazione. Le applicazioni devono intercettare le eccezioni ed elaborarle in modo appropriato.
-
Quando si passa la classe XmlTextWriter a un'altra applicazione, il flusso sottostante viene esposto a tale applicazione. Se è necessario passare la classe XmlTextWriter a un'applicazione semi-trusted, utilizzare invece un oggetto XmlWriter creato dal metodo Create.
-
La classe XmlTextWriter non convalida i dati passati ai metodi WriteDocType o WriteRaw. Non passare dati arbitrari a tali metodi.
-
Se le impostazioni predefinite vengono modificate, non è sicuro che l'output generato sia composto da dati XML in formato corretto.
-
Non accettare componenti di supporto, ad esempio un oggetto Encoding proveniente da un'origine non attendibile.
System.Xml.XmlWriter
System.Xml.XmlTextWriter
Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition , Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile per Smartphone, Windows Mobile per Pocket PC, Xbox 360
.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.
Nota: