Práce s XML v ABAPu - 2. část

SAP logo

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:

  1. 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:

    1. 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.

    2. 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.

  2. 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.

  3. 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):

  1. Package DOM
  2. Package Encoding
  3. Package Event
  4. Package iXML
  5. Package Parser
  6. Package Renderer
  7. Package Stream
  8. 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.

Související



Podělte se o tento článek s ostatními… Sdílet

Komentáře

Zatím žádné komentáře

Přidat komentář

Upozornění: Komentář musí být před publikováním schválen!
: *
: *

: *

:



  • Pole označená hvězdičkou jsou povinná.
  • Můžete použít Texy! syntaxi. HTML tagy nejsou povolené!
    Příklad syntaxe: **tučně**, *kurzíva*.
  • Odkazy začínající http(s)://, ftp:// a mailto: se zformátují automaticky.
  • Na jiné komentáře se můžete odkazovat např. zápisem [1].
  • Gravatar připojený k Vaší e-mailové bude zobrazen u komentáře.
  • Upozorňuji, že komentáře, které se netýkají tématu článku, jsou vulgární nebo urážlivé, mohou být smazány.

Začátek článku Nahoru | Začátek komentářů Nahoru

© Pavel Jaroš [Sektor PJ] · Nahoru Nahoru