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