Práce s XML v ABAPu - 2. část
V úvodním článku o XML jsem nastínil možné přístupy k práci s XML daty v ABAPu. Nyní bych chtěl podrobněji rozebrat možnosti iXML knihovny.
iXML knihovna - klíč ke XML v ABAPu
iXML knihovna je naprogramovaná v jazyku C++ (stejně tak jako jádro SAPu) a lze k ní přistupovat přes rozhraní, které je založené na ABAP objektech.
iXML knihovna implementuje podporu těchto tří základních XML služeb:
XML parser
XML parser čte XML data a stará se o nízkoúrovňovou syntaktickou analýzu XML dokumentu. Ke XML dokumentu lze přistupovat dvojím způsobem:
- Přes rozhraní řízené událostmi
Parser postupně čte XML dokument a volá funkce pro obsluhu důležitých událostí, jako začátek a konec elementu, textový obsah elementu apod.
- Přes DOM strom (model)
XML dokument je uložen v paměti jako strom objektů, kde každý objekt odpovídá jednomu uzlu ve stromu XML dokumentu.
- Přes rozhraní řízené událostmi
XML DOM 1.0
DOM (Document Object Model), jak už bylo uvedeno výše, pracuje se stromovou reprezentací XML dokumentu, kterou je možné libovolně a opakovaně procházet. Díky tomu je zpracování XML dokumentu velmi jednoduché. Ovšem za cenu nižší rychlostí a velké paměťovou náročnosti oproti zpracování parserem řízeným událostmi.
XML renderer (builder)
XML renderer neboli XML "vykreslovač" případně "tvůrce" má na starosti sestavení výsledného XML dokumentu.
Samotná iXML knihovna je tvořena těmito balíky (packages, viz SAP Help):
- Package DOM
- Package Encoding
- Package Event
- Package iXML
- Package Parser
- Package Renderer
- Package Stream
- Package Unknown
Renderování XML dokumentu
V této části článku bych rád popsal jak s pomocí iXML knihovny vyrenderovat (sestavit) XML dokument. Prvním krokem při práci s iXML knihovnou je vždy zpřístupnění knihovny v programu. Toho docílíme přidáním následujících dvou řádků:
type-pools: ixml. class cl_ixml definition load.
Dále je potřeba vytvořit iXML factory, DOM model reprezentující dokument, naplnit dokument daty (metoda create_simple_element třídy if_ixml_document), vytvořit stream factory a vygenerovat výstup do interní tabulky a konečně vyrenderovat dokument:
DATA: g_ixml TYPE REF TO if_ixml,
g_document TYPE REF TO if_ixml_document,
g_element TYPE REF TO if_ixml_element,
g_streamfactory TYPE REF TO if_ixml_stream_factory,
g_ostream TYPE REF TO if_ixml_ostream,
g_renderer TYPE REF TO if_ixml_renderer,
g_rc TYPE i.
* Creating a ixml factory
g_ixml = cl_ixml=>create( ).
* Creating the dom object model
g_document = g_ixml->create_document( ).
* Fill root node
g_element = g_document->create_simple_element(
name = 'element_name'
parent = g_document ).
* Creating a stream factory
g_streamfactory = g_ixml->create_stream_factory( ).
* Connect internal XML table to stream factory
g_ostream = g_streamfactory->create_ostream_itable(
table = g_xml_table ).
* Rendering the document
g_renderer = g_ixml->create_renderer( ostream = g_ostream
document = g_document ).
g_rc = g_renderer->render( ).
Toť vše. Vzorový program si můžete prohlédnout zde.
A příště si povíme něco o parsování souboru ve formátu XML.






