NIB: funzionalità dello spazio dei nomi all'interno di XmlTextWriter

Gli spazi dei nomi costituiscono la tecnica utilizzata per qualificare i nomi di elementi e attributi in un documento XML.I prefissi dello spazio dei nomi consentono di associare elementi e attributi agli spazi dei nomi, che a loro volta sono associati a un riferimento URI (Uniform Resource Identifier).Gli spazi dei nomi assicurano l'univocità dei nomi di elementi e attributi in un documento XML.

Nell'elenco seguente sono illustrati i metodi di XmlTextWriter che consentono a un'applicazione di dichiarare gli spazi dei nomi in modi diversicon la capacità di:

  • Dichiarare manualmente gli spazi dei nomi.

  • Sostituire la dichiarazione dello spazio dei nomi corrente con un nuovo spazio dei nomi.

  • Dichiarare più spazi dei nomi.

Oltre a dichiarare gli spazi dei nomi, è possibile aggiungere i prefissi dello spazio dei nomi a elementi e attributi.Per scrivere i prefissi dello spazio dei nomi per gli attributi, è necessario utilizzare i metodi seguenti:

  • WriteAttributes

  • WriteAttributeString

  • WriteStartAttribute

Per ulteriori informazioni sulla scrittura dei prefissi per gli attributi, vedere Prefissi dello spazio dei nomi degli attributi in XmlTextWriter.

Per scrivere i prefissi dello spazio dei nomi per gli elementi, è necessario utilizzare i metodi seguenti:

  • WriteElement

  • WriteElementString

  • WriteStartElement

Per ulteriori informazioni sulla scrittura dei prefissi per gli elementi, vedere Prefissi dello spazio dei nomi degli elementi in XmlTextWriter.

Nel writer viene mantenuto uno stack dello spazio dei nomi che tiene traccia degli spazi dei nomi definiti da un elemento.Nell'esempio di codice seguente viene illustrato l'utilizzo dello stack dello spazio dei nomi quando si scrivono gli elementi.

Dim w As New XmlTextWriter(Console.Out)
w.WriteStartElement("root", "urn:1")
w.WriteStartElement("item", "urn:2")
w.WriteEndElement()
w.WriteEndElement()
w.Close()
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("root","urn:1");
w.WriteStartElement("item","urn:2");
w.WriteEndElement();
w.WriteEndElement(); 
w.Close();

Output

<root xmlns="urn:1">
      <item xmlns="urn:2"/>
</root>

Nell'esempio seguente viene illustrato ciò che accade quando si utilizza una dichiarazione dello spazio dei nomi duplicata su un elemento annidato.Notare che nell'elemento item vuoto dell'output non viene ripetuta la dichiarazione dello spazio dei nomi.

Dim w As New XmlTextWriter(Console.Out)
w.WriteStartElement("root", "urn:1")
w.WriteStartElement("item", "urn:1")
w.WriteEndElement()
w.WriteEndElement()
w.Close()
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("root","urn:1");
w.WriteStartElement("item","urn:1");
w.WriteEndElement();
w.WriteEndElement(); 
w.Close();

Output

<root xmlns="urn:1"><item/></root>

Dichiarazione manuale dello spazio dei nomi con XmlTextWriter

Per ottimizzare una serie di dichiarazioni dello spazio dei nomi, è possibile scriverle manualmente.Nell'esempio di codice seguente è illustrato come ottimizzare la serie di dichiarazioni dello spazio dei nomi.

w.WriteStartElement("root")
w.WriteAttributeString("xmlns", "x", Nothing, "urn:1")
w.WriteStartElement("item", "urn:1")
w.WriteEndElement()
w.WriteStartElement("item", "urn:1")
w.WriteEndElement()
w.WriteEndElement()
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();

Output

<root xmlns:x="urn:1">
    <x:item/>
    <x:item/>
</x:root>

Nell'esempio di codice precedente la dichiarazione è stata promossa all'elemento root, per evitare la presenza di duplicati sui due elementi figlio.Anche il prefisso viene prelevato dagli elementi item dalla dichiarazione dello spazio dei nomi.

Override della dichiarazione dello spazio dei nomi con XmlTextWriter

Nell'esempio di codice seguente viene illustrato come eseguire manualmente l'override dello spazio dei nomi associato a un determinato prefisso.Notare che il valore di order esegue l'override dell'URI dello spazio dei nomi originale pari a 123.In questo modo è possibile ridefinire lo spazio dei nomi in un nuovo ambito degli elementi.

w.WriteStartElement("x", "node", "123")
w.WriteAttributeString("xmlns", "x", Nothing, "order")
w.WriteStartElement("x","node","123");
w.WriteAttributeString("xmlns","x",null,"order");

d1a1csew.collapse_all(it-it,VS.110).gifOutput

<x:node xmlns:x="order"/>

Più dichiarazioni dello spazio dei nomi con XmlTextWriter

Se sono presenti più dichiarazioni dello spazio dei nomi, che eseguono il mapping di diversi prefissi allo stesso URN (Uniform Resource Name), la classe XmlWriter esamina lo stack delle dichiarazioni dello spazio dei nomi precedenti e seleziona il prefisso più vicino.Nell'esempio di codice seguente viene illustrato come WriteAttributeString non specifica alcun prefisso, affinché XmlWriter rilevi per primo il prefisso y.

Dim w As New XmlTextWriter(Console.Out)
w.WriteStartElement("x", "root", "urn:1")
w.WriteStartElement("y", "item", "urn:1")
w.WriteAttributeString("abc", "urn:1", "xyz")
w.WriteEndElement()
w.WriteEndElement()
w.Close()
XmlTextWriter w = new XmlTextWriter(Console.Out);
w.WriteStartElement("x","root","urn:1");
w.WriteStartElement("y","item","urn:1");
w.WriteAttributeString("abc","urn:1","xyz");
w.WriteEndElement();
w.WriteEndElement();
w.Close();

Output

<x:root xmlns:x="urn:1">
    <y:item y:abc="xyz" xmlns:y="urn:1"/>
</x:root>

Vedere anche

Riferimenti

XmlTextWriter

XmlTextWriter

XmlWriter

XmlWriter

Concetti

Creazione di XML in formato corretto con XmlTextWriter

NIB: formattazione dell'output XML con XmlTextWriter

Altre risorse

Scrittura di XML con XmlWriter