SAX XML-Parser - anderer Parsing-Ansatz für die Behandlung von XML-Daten

  • Für das Parsing von XML-Dateien ist die wohl bekannteste die DOM-Methode (In AutoIt z.B. über das Microsoft.XMLDOM-Objekt).
    Hierbei wird die XML-Datei einmal durchgearbeitet und ein verschachtelter Elementbaum erstellt, welchen man anschließend programmiertechnisch weiterbehandeln kann.

    Diese Methode ist allerdings ziemlich aufwendig für den Rechner.

    Er muss die ganze Datei durchgehen und dabei für jedes Element eine Struktur im DOM anlegen - egal ob man das Element am Ende überhaupt benötigt.

    Speichertechnisch ist der Ansatz ebenso ziemlich unglücklich.

    Ein etwas weniger bekannter Ansatz, welcher in der angehangenen UDF implementiert wurde, bietet sich hierbei als Alternative an: Die >>Simple API for XML (SAX)<<

    Bei diesem Ansatz wird die Datei einmal sequentiell durchgegangen und an verschiedenen Haltepunkten, werden bei Bedarf Events geschmissen.
    Im konkreten AutoIt-Fall bedeutet dies z.B.: Eine nutzerdefinierte Funktion wird aufgerufen, wenn ein neues XML-Element anfängt oder endet.
    Oder es wird eine benutzerdefinierte Funktion aufgerufen, wenn gerade der Inhalt eines Elementes verarbeitet wird.

    Das klingt erstmal verwirrend und man muss durchaus erstmal ein wenig umdenken.
    Am Hilfreichsten hierzu ist sicherlich das kleine Beispiel, welches ich hinzugefügt habe.

    Wenn man das Prinzip jedoch erst einmal verstanden hat, wird man mit einem fixen, ressourcenschonenden, komplett in reinem AutoIt geschriebenen XML-Parser belohnt.

    Außerdem sind SAX-Parser robuster gegenüber Fehlern im XML-Dokument.

    Changelog:

    28.07.2022 Heftigst an der Performance-Schraube gedreht
    Umstellung der Parameterreihenfolge
    01.08.2022 Weitere Performanceverbesserungen
  • Hallo!

    Super für diese UDF :thumbup: ! Ich habe schon einmal versucht mit XML-Daten klar zu kommen, aber sagen wir mal ich bin zu alt dafür 8o

    Aber diese Funktinen verstehe ich sehr gut! Ich hoffe das es auch mit tiefer verschachtelten XML-Daten funktioniert, ich benötige immer wieder kleine Tools zur Auswertung von z.B.: Applockereinträge.

    Wenn ich wieder im Büro bin werde ich mich damit herumspielen und testen....

    lg

    Racer