2016-11-28 4 views
0

Ich möchte den Grund hinter den XmlWriter.WriteStartDocument() und XmlWriter.WriteEndDocument() wissen.Ist es möglich, XmlWriter.WriteEndDocument() zu verwenden, ohne XmlWriter.WriteStartDocument() aufzurufen

In meinem Szenario Ich erstelle ein XML-Dokument mit einigen Daten in ihm, zum Beispiel:

XmlWriter xmlWriter = XmlWriter.Create(file); 

xmlWriter.WriteStartDocument(); 

// write xml elements and attributes... 

xmlWriter.WriteEndDocument(); 

xmlWriter.Flush(); 

Während der Serialisierung, XmlWriter keine Ausnahme wirft, wenn wir den Anruf zu xmlWriter.WriteStartDocument() überspringen und rufen Sie einfach xmlWriter.WriteEndDocument() bei der Ende.

Die unter Code-Schnipsel werfen keine Fehler oder eine Ausnahme:

XmlWriter xmlWriter = XmlWriter.Create(file); 

// write xml elements and attributes... 

xmlWriter.WriteEndDocument(); 

xmlWriter.Flush(); 

Wie ist das möglich? Und können Sie die Funktionalität von WriteStartDocument() und WriteEndDocument() erklären?

+0

@stuartd Aber in C#, es funktioniert gut mit der WriteEndDocument() allein. –

+0

@stuartd Meine Fragen sind "Warum sind beide Anweisungen nicht notwendig, um die XML Deklaration in die Datei zu schreiben?". Nur "WriteEndDocument()" allein reicht aus, um die XML-Deklaration zu schreiben. Es scheint seltsam zu sein. –

+0

@stuartd in XML 1.0 (was am häufigsten verwendet wird, ist 1.1 sehr selten), [die Deklaration ist optional] (http://stackoverflow.com/questions/7007427/does-a-valid-xml-file-require -eine-xml-Deklaration). –

Antwort

2

Per the documentation für WriteStartDocument, schreibt diese Methode die XML-Deklaration, die vor dem Stammelement erscheint ::

Wenn in einer abgeleiteten Klasse überschrieben, schreibt die XML-Deklaration.

Und pro the documentation für WriteEndDocument:

Wenn in einer abgeleiteten Klasse überschrieben, schließt alle geöffneten Elemente oder Attribute und stellt den Schriftsteller wieder in den Zustand Start.

Es gibt keine Erwähnung, dass das eine mit dem anderen zusammenhängt oder davon abhängig ist, und tatsächlich scheinen Ihre Experimente das zu beweisen.

Im Gegensatz zu anderen ähnlich benannten Methodenpaaren wie WriteStartElement und kann der Aufruf eines dieser ohne den anderen Sie nicht in einen Zustand bringen, in dem das Dokument ungültig ist. Trotzdem würde ich Ihnen raten, sie am Anfang und am Ende des Schreibens eines Dokuments anzurufen, da dies offensichtlich die Absicht der API ist.

Als Neben ist es selten, XmlReader und XmlWriter direkt so zu verwenden. Sie sind XML-APIs auf sehr niedriger Ebene. Ich würde vorschlagen, dass Sie LINQ to XML und XmlSerializer für die meisten Anwendungsfälle erkunden.

+0

Danke für deine Antwort. Dieser ist hilfreich. –

Verwandte Themen