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.
Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.
La XmlTextWriter classe implementa la XmlWriter classe .
Annotazioni
È consigliabile creare XmlWriter istanze usando il XmlWriter.Create metodo e la XmlWriterSettings classe per sfruttare le nuove funzionalità.
XmlTextWriter
mantiene uno stack dei namespace corrispondente a tutti i namespace definiti nello stack di elementi corrente.
XmlTextWriter
ti consente di 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 genera l'output seguente.
XmlTextWriter
sposta la dichiarazione dello spazio dei nomi all'elemento radice per evitare che venga duplicata sui due elementi figlio. Gli elementi figlio prelevano il prefisso dalla dichiarazione dello spazio dei nomi.
<root xmlns:x="urn:1">
<x:item/>
<x:item/>
</x:root>
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 sostituito da "abc" per 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, è anche possibile specificare il prefisso da usare. Nell'esempio seguente vengono mappati due prefissi diversi allo stesso URI dello spazio dei nomi per produrre il testo <x:root xmlns:x="urn:1"><y:item xmlns:y="urn:1"/></x:root>
XML .
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 sono presenti più dichiarazioni dello spazio dei nomi che eseguono il mapping di prefissi diversi allo stesso URI dello spazio dei nomi, XmlTextWriter
scorre lo stack di dichiarazioni dello spazio dei nomi indietro e sceglie quello 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 C# precedente, poiché la WriteAttributeString
chiamata non specifica un prefisso, il writer usa l'ultimo prefisso inserito nello stack dello spazio dei nomi e produce il codice XML seguente:
<x:root xmlns:x="urn:1">
<y:item y:attr="123" xmlns:y="urn:1" />
</x:root>
Se si verificano conflitti tra spazi dei nomi, XmlTextWriter
li risolve generando prefissi alternativi. Ad esempio, se un attributo e un elemento hanno lo stesso prefisso ma spazi dei nomi diversi, XmlWriter
genera un prefisso alternativo per l'attributo. I prefissi generati sono denominati n{i}
dove i
è un numero che inizia da 1. Il numero viene reimpostato su 1 per ogni elemento.
Gli attributi associati a un URI dello spazio dei nomi devono avere un prefisso (gli spazi dei nomi predefiniti non si applicano agli attributi). Questo comportamento è conforme alla sezione 5.2 della raccomandazione "Namespaces in XML" del W3C. Se un attributo fa riferimento a un URI dello spazio dei nomi, ma non specifica un prefisso, il writer genera un prefisso per l'attributo.
Quando si scrive un elemento vuoto, viene aggiunto uno spazio aggiuntivo tra il nome del tag e il tag di chiusura, ad esempio <item />
. Ciò garantisce la compatibilità con i browser meno recenti.
Quando un String
viene usato come parametro del metodo, null
e String.Empty
sono equivalenti.
String.Empty
segue le regole W3C.
Per scrivere dati fortemente tipizzati, usare la classe XmlConvert per convertire i tipi di dati in stringhe. Ad esempio, il codice C# seguente converte i dati da Double
a String
e scrive 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 attributi e degli elementi.
- Caratteri Unicode che non rientrano nella codifica specificata. Se i caratteri Unicode non rientrano nella codifica specificata, non esegue l'escape
XmlTextWriter
dei caratteri Unicode in entità di caratteri. - Attributi duplicati.
- Caratteri nell'identificatore pubblico o nell'identificatore di sistema DOCTYPE.
Considerazioni sulla sicurezza
Gli elementi seguenti sono aspetti da considerare quando si lavora con la XmlTextWriter classe .
Le eccezioni generate da XmlTextWriter possono divulgare informazioni sul percorso che non si desidera visualizzare nell'applicazione. Le applicazioni devono intercettare le eccezioni ed elaborarle in modo appropriato.
Quando si passa XmlTextWriter a un'altra applicazione, il flusso sottostante viene esposto a tale applicazione. Se hai bisogno di passare il XmlTextWriter a un'applicazione semi-attendibile, dovresti invece usare un oggetto creato dal metodo XmlWriter.
La XmlTextWriter non convalida i dati che vengono passati ai metodi WriteDocType o WriteRaw. Non è consigliabile passare dati arbitrari a questi metodi.
Se le impostazioni predefinite vengono modificate, non vi è alcuna garanzia che l'output generato sia di dati XML ben formati.
Non accettare componenti di supporto, ad esempio un Encoding oggetto, da un'origine non attendibile.