Freigeben über


Namespacefunktionen im "XmlTextWriter"

Namespaces bilden die Voraussetzung für das Qualifizieren von Element- und Attributnamen in XML-Dokumenten. Namespacepräfixe ordnen Elemente und Attribute Namespaces zu, die wiederum URI-Verweisen (Uniform Resource Identifier) zugeordnet sind. Namespaces gewährleisten eindeutige Element- und Attributnamen in einem XML-Dokument.

Die folgende Liste veranschaulicht, dass der XmlTextWriter Methoden aufweist, mit denen eine Anwendung Namespaces auf unterschiedliche Weise deklarieren kann. Dazu gehören folgenden Funktionen:

  • Manuelles Deklarieren von Namespaces.

  • Überschreiben der aktuellen Namespacedeklaration mit einem neuen Namespace.

  • Deklarieren mehrerer Namespaces.

Namespacepräfixe werden nicht nur zum Deklarieren von Namespaces verwendet, sondern können auch an Elemente und Attribute angehängt werden. Zum Schreiben von Namespacepräfixen für Attribute werden die folgenden Methoden verwendet:

  • WriteAttributes

  • WriteAttributeString

  • WriteStartAttribute

Weitere Informationen über das Schreiben von Präfixen für Attribute finden Sie unter Präfixe für Attributnamespaces in "XmlTextWriter".

Zum Schreiben von Namespacepräfixen für Elemente werden die folgenden Methoden verwendet:

  • WriteElement

  • WriteElementString

  • WriteStartElement

Weitere Informationen über das Schreiben von Präfixen für Elemente finden Sie unter Präfixe des Elementnamespaces in "XmlTextWriter".

Der Writer verwaltet einen Namespacestapel, in dem die Namespaces aufgezeichnet werden, die durch ein Element definiert wurden. Im folgenden Codebeispiel wird die Verwendung des Namespacestapels beim Schreiben von Elementen veranschaulicht.

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();

Ausgabe

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

Im folgenden Codebeispiel wird veranschaulicht, was geschieht, wenn in einem geschachtelten Element eine doppelt vorkommende Namespacedeklaration verwendet wird. Beachten Sie, dass das leere item-Element in der Ausgabe die Namespacedeklaration nicht wiederholt.

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();

Ausgabe

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

Manuelle Namespacedeklaration mit dem "XmlTextWriter"

Namespacedeklarationen können auch manuell geschrieben werden, um die Anzahl der Namespacedeklarationen zu optimieren. Im folgenden Codebeispiel wird veranschaulicht, wie die Anzahl der Namespacedeklarationen optimiert werden kann.

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();

Ausgabe

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

Im obigen Codebeispiel wurde die Namespacedeklaration in das root-Element hinaufgestuft, damit in den beiden untergeordneten Elementen keine Namespacedeklaration doppelt vorkommt. Die item-Elemente übernehmen außerdem das Präfix aus der Namespacedeklaration.

Überschreiben der Namespacedeklaration mit dem "XmlTextWriter"

Im folgenden Codebeispiel wird veranschaulicht, wie Sie den mit einem bestimmten Präfix verknüpften Namespace manuell überschreiben können. Beachten Sie, dass der order-Wert den ursprünglichen Namespace-URI 123 überschreibt. Dadurch kann der Namespace in einem neuen Elementgültigkeitsbereich neu definiert werden.

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

Ausgabe

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

Mehrere Namespacedeklarationen mit dem "XmlTextWriter"

Wenn mehrere Namespacedeklarationen vorhanden sind, wobei unterschiedliche Präfixe dem gleichen URN (Uniform Resource Name) zugeordnet werden, wählt die XmlWriter-Klasse die nächstliegende aus, indem sie den Stapel der Namespacedeklarationen wieder zurück nach oben durchläuft. Im folgenden Codebeispiel wird gezeigt, wie mit WriteAttributeString kein Präfix angegeben wird, sodass der XmlWriter zuerst das y-Präfix findet.

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();

Ausgabe

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

Siehe auch

Referenz

XmlTextWriter

XmlTextWriter

XmlWriter

XmlWriter

Konzepte

Erstellen von wohlgeformtem XML mit "XmlTextWriter"

XML-Ausgabeformatierung mit "XmlTextWriter"

Weitere Ressourcen

Schreiben von XML mit dem "XmlWriter"