handout 2

Werbung
XML-Parser
DOM
Funktionsprinzip:
• Parsen des gesamten Dokuments zu Beginn
• Abbild des Infosets im Speicher (Objektbaum)
Vorteile: wahlfreier Zugriff, komfortabel, Manipulation/Erzeugung von XML-Dokumenten
Nachteile: hoher Speicherbedarf, relativ langsam,
SAX
Funktionsprinzip:
• Sequentielles Parsen
• Event-basierte Kommunikation
Vorteile: wenig Speicherbedarf, sehr schnell, für große Dokumente geeignet
Nachteile: hoher Programmieraufwand, kein Navigation im Dokument, späte Fehlererkennung
Pull-Parser
Funktionsprinzip:
• sequentielles, schrittweises Parsen auf Anweisung
Vorteile: Überspringen von Knoten(Effizienz), mehrere Eingabe-Streams leicht möglich
Nachteile: hoher Programmieraufwand, späte Fehlererkennung
Anwendung in C#:
XmlReader konfigurieren und verwenden:
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.DTD;
…
XmlReader reader = XmlReader.Create(path, settings);
Details zur Konfiguration:
http://msdn.microsoft.com/dede/library/system.xml.xmlreadersettings
_properties.aspx
Navigation Elemente:
reader.ReadToFollowing("ElementName ");
reader.ReadToNextSibling("ElementName");
reader.ReadToDescendant("ElementName");
reader.Skip();
//Nächstes Element mit angegebenen Namen
//Nächstes Element auf gleicher Ebene
//Nächstes Element mit angegebenen Namen im Subtree
//Knoteninhalt (auch Childs) werden übersprungen
Navigation Attribute:
reader.MoveToFirstAttribute();
reader.MoveToNextAttribute();
reader.HasAttributes;
//erstes Attribut eines Elements
//nächstes Attribut
//Attribute vorhanden ?
XmlDocument verwenden:
XmlDocument doc = new XmlDocument();
doc.Load(path);
//Dokument unter angegebenem Pfad parsen und laden
Navigation mit dem XmlNode Interface:
newNode.ChildNodes;
newNode.FirstChild;
newNode.ParentNode;
newNode.NextSibling;
//Liste aller direkten Kindknoten
//Erster Kindknoten
//Übergeordneter Knoten
//Nächstes Element auf gleicher Ebene
Knoten mit XmlDocument erzeugen
document.CreateElement("ElementName");
document.CreateAttribute("Attribute");
//Neuen Element-Knoten erzeugen
//Neuen Attribut-Knoten erzeugen
In DOM einfügen:
node.InsertAfter(newNode, parentNode);
node.AppendChild(newChildNode);
//Knoten nach angegebenen Knoten einfügen
//Knoten als Kind anhängen
Herunterladen