• Header exxsens Developer Blog

DOCX-WORKSHOP - TEIL 4 (Implementierung der Methode GET_DATA)

Im vorherigen Teils unseres Workshops haben wir uns die Klasse ZCL_DOCX mit der Methode GET_DATA angelegt.

In diesem Teil soll nun der erste Schritt zur Implementierung der Methode erfolgen. Wie in den vorherigen Artikeln beschrieben handelt es sich bei der docx-Datei um einen Container. Diesen Container müssen wir nun auseinander nehmen und uns die benötigten Dateien daraus aufbereiten.

Mit dem Upload der docx-Datei im XSTRING-Format erzeuge ich mir zuerst über die Methode load_document der Klasse cl_docx_document eine Instanz der Klasse. Im nächsten Schritt wird mit dieser Instanz wiederum eine Instanz der Klasse cl_docx_maindocumentpart über die Methode get_maindocumentpart erzeugt. Mit dieser Instanz erhalte ich über die Methode get_data den Inhalt der XML-Datei aus dem Container der mich interessiert in meine Variable lv_document. Der Inhalt der XML-Datei liegt zu diesem Zeitpunkt jedoch nur als XSTRING vor und muss entsprechend in eine XML-Datei transformiert werden. Diese Transformation ist relativ simpel und im folgenden Coding abgebildet.

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output encoding="UTF-8" indent="yes" method="xml" version="1.0"/>
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:transform> 

Nachdem die Daten nun im XML-Format vorliegen bereite ich mir diese über einen regulären Ausdruck in eine interne Tabelle auf, um besser damit arbeiten zu können.

Das bisherige Coding finden Sie hier in diesem Listing:

  DATA: lo_docx           TYPE REF TO cl_docx_document,
        lo_main_part      TYPE REF TO cl_docx_maindocumentpart,
        lv_document       TYPE xstring,
        lv_xml            TYPE string,
        lt_result         TYPE match_result_tab.

**********************************************************************
* das Dokument laden
**********************************************************************
  lo_docx = cl_docx_document=>load_document( im_v_file_data ).

**********************************************************************
* hier haben wir jetzt die document.xml als Referenz
**********************************************************************
  lo_main_part = lo_docx->get_maindocumentpart( ).
  lv_document = lo_main_part->get_data( ).

**********************************************************************
* jetzt wandeln wird den XSTRING in eine Zeichenkette
**********************************************************************
  CALL TRANSFORMATION zms_xstring_xml
    SOURCE XML lv_document
    RESULT XML lv_xml.

**********************************************************************
* jetzt werden die Tags ermittelt
**********************************************************************
  FIND ALL OCCURRENCES OF REGEX `<[^>]+>`
    IN lv_xml RESULTS lt_result. 

Im nächsten Teil unseren Workshops gehe ich dann darauf ein, wie Sie Inhalte aus der Datei auslesen können und wir bekommen schon einen Ausblick auf die Manipulationsmöglichkeiten die uns für die Datei zur Verfügung stehen.

Header für Progamme / Methoden / Funktionsbaustein...
Programmierrichtlinien / Namenskonventionen

Ähnliche Beiträge

Empfehlen Sie uns weiter