Freigeben über


XmlTextWriter-Klasse

Stellt einen Writer für die schnelle, nicht zwischengespeicherte Vorwärtsgenerierung von Streams oder Dateien dar, die XML-Daten gemäß den W3C-Empfehlungen zu XML (Extensible Markup Language), Version 1.0, und zu Namespaces in XML enthalten.

Namespace: System.Xml
Assembly: System.Xml (in system.xml.dll)

Syntax

'Declaration
Public Class XmlTextWriter
    Inherits XmlWriter
'Usage
Dim instance As XmlTextWriter
public class XmlTextWriter : XmlWriter
public ref class XmlTextWriter : public XmlWriter
public class XmlTextWriter extends XmlWriter
public class XmlTextWriter extends XmlWriter

Hinweise

Diese Klasse implementiert die XmlWriter-Klasse.

Hinweis

Die empfohlene Vorgehensweise für die Version Microsoft .NET Framework, Version 2.0 besteht darin, mithilfe der System.Xml.XmlWriter.Create-Methode und der XmlWriterSettings-Klasse XmlWriter-Instanzen zu erstellen. So können Sie alle neuen Features dieser Version in vollem Umfang nutzen. Weitere Informationen finden Sie unter Erstellen von XML-Writern.

XmlTextWriter verwaltet einen Namespacestapel, der sämtlichen 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 obige C#-Code erstellt die folgende Ausgabe. XmlTextWriter definiert die Namespacedeklaration als Stammelement, damit diese nicht für die beiden untergeordneten Elemente dupliziert wird. Die untergeordneten Elemente übernehmen das Präfix von der Namespacedeklaration.

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

XmlTextWriter ermöglicht Ihnen auch das Überschreiben der aktuellen Namespacedeklaration. Im folgenden Beispiel wird der Namespace-URI "123" mit "abc" überschrieben, um das XML-Element <x:node xmlns:x="abc"/> zu erstellen.

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

Sie können außerdem angeben, welches Präfix verwendet werden soll, indem Sie eine Schreibmethode verwenden, die als Argument ein Präfix verwendet. Im folgenden Beispiel sind 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 erstellen.

 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 demselben Namespace-URI unterschiedliche Präfixe zuordnen, führt XmlTextWriter einen Rückwärts-Stackwalk durch die Namespacedeklarationen aus und wählt die nächste 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();

Da im obigen C#-Beispiel beim WriteAttributeString-Aufruf kein Präfix angegeben wird, verwendet der Writer das letzte auf den Namespacestapel gelegte Präfix und erstellt folgenden XML-Code:

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

Beim Auftreten von Namespacekonflikten werden diese von XmlTextWriter durch Generieren anderer Präfixe aufgelöst. Wenn z. B. ein Attribut und ein Element dasselbe Präfix, doch unterschiedliche Namespaces aufweisen, generiert XmlWriter für das Attribut ein anderes Präfix. Die generierten Präfixe werden mit n{i} benannt, wobei i eine bei 1 beginnende Zahl ist. Die Zahl wird für jedes Element auf 1 zurückgesetzt.

Einem Namespace-URI zugeordnete Attribute müssen über ein Präfix verfügen (Standardnamespaces werden auf Attribute nicht angewendet). Dies stimmt mit Abschnitt 5.2 der W3C-Empfehlung für Namespaces in XML überein. Wenn ein Attribut auf einen Namespace-URI verweist, jedoch kein Präfix angibt, generiert der Writer ein Präfix für das Attribut.

Beim Schreiben eines leeren Elements wird zwischen Tagname und schließendem Tag ein zusätzliches Leerzeichen eingefügt, z. B. <item />. Dadurch wird die Kompatibilität mit älteren Browsern gewährleistet.

Wenn ein String als Methodenparameter verwendet wird, sind NULL (Nothing in Visual Basic) und String.Empty äquivalent. String.Empty entspricht den W3C-Regeln.

Verwenden Sie zum Schreiben von stark typisierten Daten die XmlConvert-Klasse, um Datentypen in String zu konvertieren. Der folgende C#-Code konvertiert z. B. die Daten aus Double in String und schreibt das Element <price>19.95</price>.

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

XmlTextWriter führt keine Überprüfung auf folgende Elemente durch:

  • Ungültige Zeichen in Attribut- und Elementnamen.

  • Unicode-Zeichen, die nicht der angegebenen Codierung entsprechen. Wenn die Unicode-Zeichen nicht mit der angegebenen Codierung übereinstimmen, wandelt der XmlTextWriter diese Unicode-Zeichen nicht in Zeichenentitäten um.

  • Doppelt vorkommende Attribute.

  • Zeichen im öffentlichen DOCTYPE-Bezeichner oder im Systembezeichner.

Weitere Informationen zum Schreiben von XML-Code finden Sie unter Schreiben von XML mit dem "XmlWriter".

Sicherheitsüberlegungen

Beachten Sie beim Arbeiten mit der XmlTextWriter-Klasse folgende Punkte:

  • Vom XmlTextWriter ausgelöste Ausnahmen können Pfadinformationen offen legen, die in der Anwendung nicht weitergegeben werden sollen. Die Anwendungen müssen Ausnahmen abfangen und entsprechend verarbeiten.

  • Wenn Sie den XmlTextWriter an eine andere Anwendung übergeben, wird der zugrunde liegende Stream für diese Anwendung verfügbar gemacht. Wenn Sie den XmlTextWriter an eine teilweise vertrauenswürdige Anwendung übergeben müssen, sollten Sie stattdessen ein XmlWriter-Objekt verwenden, das von der Create-Methode erstellt wurde.

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

  • Wenn die Standardeinstellungen geändert werden, ist nicht sichergestellt, dass die generierte Ausgabe wohlgeformte XML-Daten darstellen.

  • Akzeptieren Sie von einer nicht vertrauenswürdigen Quelle keine Hilfskomponenten, z. B. ein Encoding-Objekt.

Vererbungshierarchie

System.Object
   System.Xml.XmlWriter
    System.Xml.XmlTextWriter

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

XmlTextWriter-Member
System.Xml-Namespace

Weitere Ressourcen

XML-Dokumente und XML-Daten
Sicherheit und System.Xml-Anwendungen