1) Der [b]SAX-Parser[/b] ist ein Stream-Parser-API mit
CALLBACK-Funktionen. Er braucht kaum Hauptspeicher.
2) Mit der Funktion startElement() von SAX hinterlegst du eine Funktion,
die dann anspricht wenn der Elementname (wird dir als Parameter
übergeben) für dich interessant ist. Prüfen des Namens musst du
implementieren.
3) Mit startElement() und endElement() kannst du mit Unterfunktionen
oder einem Schachtelungszähler ermitteln, ob es sich um ein
gleichnamiges Element handelt, das aber ein anderes Elternelement hat
oder das in einer anderen Ebene steht.
4) Implementierungen gibt es in JAVA oder als XERCES-C++.
5) Ausgabe einer XML-Datei kann mit perfektem Zeichensatz mit einem
SERIALIZER des Parsers erfolgen. Es geht auch mit der Funktion printf().
Hier solltest du Die Ausgabe der Elemente mit Unterfunktionen
hierarchisch schachteln. Die Unterfunktionen sollten die Namen der
XML-Elemente tragen. Am besten du rückst die Elemente sauber mit 2 bis
drei Leerzeichen pro Schachtelungsebene ein.
6) Ein XML-Tag kann man mit REGEXP oder auch einem abstrakten Automat
parsen, da es nicht geschachtelt ist. Um die Schachtelung der Elemente
zu prüfen, ist ein abstrakter Kellerautomat notwendig, der also selbst
RAM alloziert (für den Keller). So könnte ein µC eine kleine XML-Datei
parsen.
7) XSLT ist eine andere Technik, die eine XML-Datei mit Such-und
Ausgabefunktionalität umwandelt, ohne ein Zwischenergebnis zu speichern.
Sie ist in Firefox- und IE-Browser eingebaut. Es ist mit XSLT nur
möglich, Konstanten an einer Stelle der Datei anzulegen, man kann sie
nicht ändern. Deshalb brauchst du für Zählvorgänge eine rekursive
Programmierung. Dieses Konzept wird für den PC angewendet, nicht bei µC,
weil es dynamisch Speicher holt. Das Konzept des XPATH realisiert die
Suchfunktionalität in XSLT, es ist im übertragenem Sinne das
SELECT-Statement von SQL.
8) XML enthält Textknoten. Eine beliebige Anzahl von Tabulatoren,
Zeilentrennern und Leerzeichen zwischen zwei Wörtern des Textes gilt als
genau ein Leerzeichen. XML legt nicht eindeutig fest, ob ein Leerzeichen
vor dem ersten Wort oder nach dem letzten Wort des Textknotens auch als
Leerzeichen gilt. Auch Leerzeichen ohne Text zwischen zwei Knoten sind
nicht klar definiert. Der Grund ist, dass man durch Einfügen beliebigen
Leer-Raumes die XML-Datei formatieren kann, und dass diese Formatierung
sich auf das Ergebnis des Parse-Vorganges nicht auswirken darf.