Share via


System.Xml.XmlTextWriter-Klasse

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

Die XmlTextWriter-Klasse implementiert die XmlWriter-Klasse.

Hinweis

Es wird empfohlen, XmlWriter-Instanzen mithilfe der XmlWriter.Create-Methode und der XmlWriterSettings-Klasse zu erstellen, um neue Funktionen zu nutzen.

XmlTextWriter verwaltet eine Namespacestapel, die allen im aktuellen Elementstapel definierten Namespaces entspricht. Mithilfe von XmlTextWriter können Sie Namespaces manuell deklarieren.

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

Der obenstehende C#-Code erzeugt die folgende Ausgabe. XmlTextWriter fördert die Namespacedeklaration zum Stammelement, um zu vermeiden, dass sie in den beiden untergeordneten Elementen dupliziert wird. Die untergeordneten Elemente übernehmen außerdem das Präfix aus der Namespacedeklaration.

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

XmlTextWriter ermöglicht Ihnen außerdem die aktuelle Namespacedeklaration außer Kraft zu setzen. Im folgenden Beispiel wird der Namespace-URI „123“ durch „abc“ überschrieben, um das XML-Element <x:node xmlns:x="abc"/> zu erzeugen.

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

Mithilfe der Schreibmethoden, die ein Präfix als Argument verwenden, können Sie auch angeben, welches Präfix verwendet werden soll. Im folgenden Beispiel werden zwei verschiedene Präfixe demselben Namespace-URI zugeordnet, um den XML-Text <x:root xmlns:x="urn:1"><y:item xmlns:y="urn:1"/></x:root> zu erzeugen.

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

Wenn mehrere Namespacedeklarationen unterschiedliche Präfixe demselben Namespace-URI zuordnen, führt XmlTextWriter den Stapel von Namespacedeklarationen zurück und wählt den nächstgelegenen aus.

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

Im obigen C#-Beispiel, da der WriteAttributeString-Aufruf kein Präfix angibt, verwendet der Writer das letzte Präfix, das auf den Namespacestapel verschoben wurde, und erzeugt die folgende XML:

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

Wenn Namespacekonflikte auftreten, löst XmlTextWriter sie durch Generieren alternativer Präfixe auf. Wenn z. B. ein Attribut und ein Element dasselbe Präfix, aber unterschiedliche Namespaces aufweisen, generiert XmlWriter ein alternatives Präfix für das Attribut. Die generierten Präfixe werden mit n{i} benannt, wobei i eine Zahl beginnend mit 1 ist. Die Zahl wird für jedes Element auf 1 zurückgesetzt.

Attribute, die einem Namespace-URI zugeordnet sind, müssen über ein Präfix verfügen (Standardnamespaces gelten nicht für Attribute). Dies entspricht Abschnitt 5.2 der W3C-Namespaces in XML-Empfehlung. Wenn ein Attribut auf einen Namespace-URI verweist, aber kein Präfix angibt, generiert der Writer ein Präfix für das Attribut.

Beim Schreiben eines leeren Elements wird ein zusätzliches Leerzeichen zwischen Tagname und abschließendem Tag hinzugefügt, z. B <item />. Dies bietet Kompatibilität mit älteren Browsern.

Wenn String als Methodenparameter verwendet wird, sind null und String.Empty gleichwertig. String.Empty folgt den W3C-Regeln.

Um stark typisierte Daten zu schreiben, verwenden Sie die XmlConvert-Klasse, um Datentypen in eine Zeichenfolge zu konvertieren. Mit dem folgenden C#-Code werden die Daten beispielsweise von Double zu String konvertiert und das Element <price>19.95</price> wird geschrieben.

Double price = 19.95;
writer.WriteElementString("price", XmlConvert.ToString(price));

XmlTextWriter überprüft nicht Folgendes:

  • Ungültige Zeichen in Attribut- und Elementnamen.
  • Unicode-Zeichen, die nicht der angegebenen Codierung entsprechen. Wenn die Unicode-Zeichen nicht der angegebenen Codierung entsprechen, kann XmlTextWriter die Unicode-Zeichen nicht in Zeichenentitäten entweichen.
  • Doppelte Attribute.
  • Zeichen im öffentlichen DOCTYPE-Bezeichner oder Systembezeichner.

Sicherheitshinweise

Die folgenden Elemente sind Dinge, die Sie beim Arbeiten mit der XmlTextWriter-Klasse berücksichtigen sollten.

  • Ausnahmen, die von XmlTextWriter ausgelöst werden, können Pfadinformationen offenlegen, die Sie nicht an die Anwendung weitergeben möchten. Die Anwendungen müssen diese Ausnahmen abfangen und entsprechend verarbeiten.

  • Wenn ein XmlTextWriter an eine andere Anwendung übergeben wird, wird der zu Grunde liegenden Stream für diese Anwendung offengelegt. Übergeben Sie an eine teilweise vertrauenswürdige Anwendung ein von der XmlTextWriter-Methode erstelltes XmlWriter-Objekt anstelle eines Create-Objekts.

  • XmlTextWriter überprüft keine Daten, die an die WriteDocType- oder WriteRaw-Methoden übergeben werden. Sie sollten keine beliebigen Daten an diese Methoden übergeben.

  • Wenn die Standardeinstellungen geändert werden, besteht keine Garantie dafür, dass die generierte Ausgabe wohlgeformte XML-Daten sind.

  • Achten Sie darauf, keine Unterstützung für Komponenten aus einer nicht vertrauenswürdigen Quelle zu gewähren, z. B. Encoding-Objekten.