??Entwerfen Sie die XmlReadWriter-Klasse
??Wie bereits erwähnt, arbeiten XML-Reader und -Writer unabhängig voneinander: Reader liest nur, Writer schreibt nur. Angenommen, Ihre Anwendung muss ein langes XML-Dokument verarbeiten, und das Dokument enthält instabile Daten. Der Reader bietet eine gute Möglichkeit, den Inhalt des Dokuments zu lesen. Writer hingegen ist ein sehr nützliches Werkzeug zum Erstellen von XML-Dokumentfragmenten. Wenn Sie jedoch möchten, dass es sowohl lesbar als auch beschreibbar ist, müssen Sie XMLDOM verwenden. Wenn das eigentliche XML-Dokument sehr groß ist, wird ein anderer Titel angezeigt. Welcher Titel ist das? Sollen wir das gesamte XML-Dokument in den Speicher laden und es später lesen und schreiben? Schauen wir uns zunächst an, wie man einen Hybrid-Stream-Analysator zum Parsen großer XML-DOMs erstellt.
Verwenden Sie wie bei einem normalen schreibgeschützten Vorgang einen gewöhnlichen XML-Reader, um nacheinander auf Knoten zuzugreifen. Der Unterschied besteht darin, dass Sie den XML-Writer verwenden können, um Attributwerte und Knoteninhalte beim Lesen zu ändern. Sie verwenden den Reader, um jeden Knoten in der Quelldatei zu lesen, und der Hintergrund-Writer erstellt eine Kopie des Knotens. In dieser Kopie können Sie einige neue Knoten hinzufügen, andere Knoten ignorieren oder bearbeiten und Attributwerte bearbeiten. Wenn Sie mit den Änderungen fertig sind, ersetzen Sie das alte Dokument durch das neue.
?? Eine einfache und effektive Methode besteht darin, das Knotenobjekt vom schreibgeschützten Stream in den Schreibstream zu kopieren. Diese Methode kann zwei Methoden in der XmlTextWriter-Klasse verwenden: die WriteAttributes-Methode und die WriteNode-Methode. Die WriteAttributes-Methode liest alle gültigen Attribute des im aktuellen Reader ausgewählten Knotens und kopiert die Attribute dann als separate Zeichenfolge in den aktuellen Ausgabestream. In ähnlicher Weise verwendet die WriteNode-Methode eine ähnliche Methode, um andere Knotentypen außer Attributknoten zu verarbeiten. Der in Abbildung 10 gezeigte Codeausschnitt zeigt, wie Sie mit den beiden oben genannten Methoden eine Kopie des XML-Quelldokuments erstellen und bestimmte Knoten selektiv ändern können. Auf den XML-Baum wird ausgehend von der Wurzel des Baums zugegriffen, es werden jedoch nur Knoten anderer Typen als Attributknotentypen ausgegeben. Sie können Reader und Writer in eine neue Klasse integrieren und eine neue Schnittstelle entwerfen, damit diese Streams lesen und schreiben und auf Eigenschaften und Knoten zugreifen kann.
Abbildung 10 Verwendung der WriteNode-Methode
XmlTextReader reader = new und Writer
writer.Formatting = Formatting.Indented; >writer.WriteStartElement(reader.LocalName);
// Jeden zweiten Knoten lesen und ausgeben
int i=0; while(reader .Read())
{
if (i % 2)
writer.WriteNode(reader, false);
i ;
}
// Schließe den Stamm
writer.WriteEndElement();
// Schließe den Reader und write
writer.Close();
reader.Close();?Meine XmlTextReadWriter-Klasse ist nicht von XmlReader oder Persistent in der XmlWriter-Klasse abgeleitet. Stattdessen gibt es zwei weitere Klassen: Eine ist eine Steuerklasse, die auf einem schreibgeschützten Stream (Stream) basiert, und die andere ist eine Steuerklasse, die auf einem schreibgeschützten Stream basiert. Die Methode der Klasse XmlTextReadWriter verwendet das Reader-Objekt zum Lesen von Daten und schreibt sie in das Writer-Objekt. Zur Anpassung an unterschiedliche Anforderungen werden die internen Reader- und Writer-Objekte über die schreibgeschützten Reader- und Writer-Eigenschaften verfügbar gemacht. Abbildung 11 listet einige Methoden dieser Klasse auf: Abbildung 11 XmlTextReadWriter-Klassenmethoden
Methode
Beschreibung
AddAttributeChange
Zwischenspeichert alle Informationen, die zum Durchführen einer Änderung an einem Knotenattribut erforderlich sind Die über diese Methode zwischengespeicherten Änderungen werden während eines nachfolgenden Aufrufs von
Read
Einfacher Wrapper um die Read-Methode des internen Lesers
WriteAttributes
Spezialisierte Version der WriteAttributes des Autors verarbeitet -Methode, schreibt alle Attribute für den angegebenen Knoten aus und berücksichtigt dabei alle über die AddAttributeChange-Methode zwischengespeicherten Änderungen.
WriteEndDocument
Beendet das aktuelle Dokument im Writer und schließt sowohl den Reader als auch den Writer.
WriteStartDocument
Bereitet den internen Writer auf die Ausgabe des Dokuments und fügt einen Standardkommentartext und den Standard-XML-Prolog hinzu.
?? Diese neue Klasse verfügt über eine Read-Methode ist eine einfache Kapselung der Lesemethode von Reader. Darüber hinaus stellt es die Methoden WriterStartDocument und WriteEndDocument bereit. Sie initialisieren/freigeben (finalisieren) die internen Reader- bzw. Writer-Objekte und verarbeiten außerdem alle E/A-Vorgänge. Während wir die Knoten in einer Schleife lesen, können wir die Knoten direkt korrigieren. Aus Leistungsgründen müssen Attribute zunächst mit der Methode AddAttributeChange geändert werden. Alle Änderungen an den Attributen eines Knotens werden in einer temporären Tabelle gespeichert. Abschließend werden die Änderungen durch Aufrufen der WriteAttribute-Methode übermittelt und die temporäre Tabelle gelöscht.
Das Obige ist der Inhalt der einfachen Verarbeitung von XML-Daten (5-1) in .NET Framework. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (m.sbmmt.com).