SAP NetWeaver AS ABAP Release 750, ©Copyright 2016 SAP AG. Alle Rechte vorbehalten.
ABAP - Schlüsselwortdokumentation →
ABAP - Referenz →
Daten- und Kommunikationsschnittstellen →
ABAP und XML →
Klassenbibliotheken für XML →
iXML-Bibliothek
API der iXML-Bibliothek
Die iXML-Bibliothek stellt eine API zum Umgang mit XML-Dokumenten im DOM-Format zur Verfügung. Die API ermöglicht es,
- XML-Daten in das DOM-Format zu parsen,
- auf XML-Dokumente im DOM-Format lesend und schreibend zuzugreifen, was die Erstellung neuer Dokumente umfasst,
- XML-Dokumente im DOM-Format in XML-Daten zu rendern.
Die API wird in ABAP-Programmen über Interfaces
der Klassenbibliothek mit der Namenskonvention IF_IXML_... verwendet. Eine Zugangsklasse CL_IXML enthält
Factory-Methoden um die grundlegenden Objekte wie Ströme, Parser, Dokumente, Renderer zu erzeugen,
auf die dann über Interfacereferenzvariablen zugegriffen wird. Die Klassen und Interfaces sind im Class Builder dokumentiert.
Hinweise
- Die Klassen und Interfaces der iXML-Bibliothek
aus dem Paket SIXML verschalen in C++ implementierte Klassen und Interfaces, die als Teil des ABAP-Kernels ausgeliefert werden.
- Eigenständige Versionen für C++ und C werden ebenfalls ausgeliefert, wobei die Version für C eine Verschalung der in C++ implementierten Bibliothek ist.
- Die iXML-Bibliothek unterstützt die Unicode-Zeichendarstellung
UCS-2. Zeichen aus dem
Surrogat-Bereich werden nicht unterstützt und können als ungültig zurückgewiesen werden.
Zugang zur iXML-Bibliothek
Für den Zugang zur iXML-Bibliothek in einem ABAP-Programm wird genau ein Factory-Objekt der
Zugangsklasse CL_IXML benötigt, das wie folgt erzeugt wird:
-
DATA(ixml) = cl_ixml=>create( ).
Der statische Typ der Referenzvariable ixml ist dann das Interface
IF_IXML, das alle Factory-Methoden enthält, die benötigt werden, um weitere Objekte wie Ströme, XML-Dokumente, Parser oder Renderer anzulegen. Das Factory-Objekt ist ein Singleton und kann nur einmal in einer
internen Sitzung instanziert werden.
Services der iXML-Bibliothek
Die Klassen und Interfaces der iXML-Bibliothek bieten im Wesentlichen folgende Services:
-
Der XML-Parser analysiert eine XML-Datei, das in einem
Eingabestrom zur Verfügung gestellt wird, auf syntaktische Korrektheit und erzeugt daraus ein
XML-Dokument in einer
DOM-Darstellung, auf die über Interfaces zugegriffen werden kann. Das DOM kann wie folgt erstellt werden:
- Komplettes Parsen in das DOM
Der Parser erzeugt das XML-Dokument in
DOM-Repräsentation für die vollständigen XML-Daten in einem Durchgang und stellt es in den Speicher.
- Sequenzielles Parsen
Der Parser
verarbeitet den Eingabestrom in sequenziellen Durchgängen, wobei jede Sequenz durch so genannte
Ereignisse bestimmt wird, auf die über das Interface IF_IXML_EVENT zugegriffen werden kann. Die
Anwendung kann jede Sequenz bereits während des Parsens bearbeiten. Es kann eingestellt werden, ob dabei ein vollständiges XML-Dokument in
DOM-Repräsentation abgespeichert wird oder nicht.
- Parsen in Datenobjekte
Beim Parsen
in Datenobjekte werden die Token der geparsten XML-Daten direkt in ABAP-Datenobjekte (Strukturen, interne
Tabellen) geschrieben. Ein XML-Dokument in DOM-Repräsentation kann zusätzlich abgespeichert werden.
-
Ein als DOM repräsentiertes
XML-Dokument ist eine standardisierte Baumdarstellung halten. Für jede logische Einheit des XML-Dokuments
gibt es ein Knotenobjekt einer zugehörigen Klasse, die entsprechend spezialisierte Interfaces implementiert. Ein ABAP-Programm kann über die Interfaces lesend und ändernd auf das
XML-Dokument zugreifen. Die Klassen der Knotenobjekte werden im Programm in der Regel nicht direkt verwendet.
-
Der XML-Renderer erzeugt XML-Daten aus einem als DOM abgespeicherten XML-Dokument, das durch Parsen
mit und ohne nachfolgender Modifikation entstanden ist oder mit den Methoden der DOM-Interfaces völlig neu erzeugt wurde, und gibt sie in einen
Ausgabestrom aus.
Hinweise
- Ein Vorteil des DOM ist ein sehr einfacher direkter Zugriff auf die einzelnen Bestandteile eines
XML-Dokuments. Ein Nachteil ist aber der erhöhte Speicherverbrauch, der das Zehnfache der eigentlichen
Größe des Dokuments betragen kann. Dabei ist zu beachten, dass das Dokument selbst bereits
mehr Speicher für Markup als für die eigentlichen Daten verbrauchen kann. Der Speicherverbrauch
kann eingeschränkt werden, indem beim sequenziellen Parsen oder beim Parsen in Datenobjekte kein komplettes DOM erzeugt wird.
- Das DOM der iXML-Bibliothek umfasst auch DTDs (Document Type Definitions).
- Falls es nur um das Parsen und Rendern von XML-Daten geht und kein XML-Dokument in DOM-Darstellung und keine DTD benötigt wird, stellt die
sXML-Bibliothek eine performantere Alternative zur iXML-Bibliothek dar.
- Die iXML-Bibliothek unterstützt ausschließlich das Format XML 1.0, bei dem XML-Daten durch eine Zeichenkette in einer bestimmten Zeichendarstellung dargestellt werden. Die
sXML-Bibliothek unterstützt weitere Formate.
- Beim Rendern in zeichenartige XML-Daten, wird diesen die vom XML-Standard geforderte Byte-Order Mark (BOM) vorangestellt.
Weiterlesen
iXML-Bibliothek - Ströme und Dokumente
iXML-Bibliothek - Parsen
iXML-Bibliothek - Zugriff auf das DOM
iXML-Bibliothek - Rendern
iXML-Bibliothek - Klassen und Interfaces
iXML-Bibliothek, Beispiele