XML Block einfügen

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

XML Block einfügen

Beitrag von Prego (Specialist / 106 / 22 / 1 ) »
Hallole zusammen,

mal wieder das leidige Thema XML. Folgende Anforderung wurde an mich herangetragen: Eine XML exportieren die jeden Werkstoff (Dokumentenart) im System + diverse Klassifizierungsmerkmale enthält. Alles soweit kein Thema und mit ixml wunderbar zu bewerkstelligen.

Aber das XML muss zusätzlich einen Bereich mit Metadaten (Umrechnungen, div. Härtegrade....) enthalten. Dieser Bereich ist immer gleich. Wäre auch kein Thema wenn nicht meine Faulheit und die Größe dieses Bereiches wäre. Es handelt sich dabei um ca. 270 zusätzliche Knoten (über 1300 Zeilen) in dem Stil:

Code: Alles auswählen.

<PropertyDetails id="FatigueDuctExp_48">
  <Name>FatigueDuctExp</Name>
    <Units>
      <Unitless/>
    </Units>
</PropertyDetails>
<PropertyDetails id="FatigueDuctExp2_49">
  <Name>FatigueDuctExp2</Name>
   <Units>
    <Unitless/>
   </Units>
</PropertyDetails>
<PropertyDetails id="FatigueDuctExp12_50">
  <Name>FatigueDuctExp12</Name>
   <Units>
    <Unitless/>
   </Units>
</PropertyDetails>
<PropertyDetails id="CyclicYieldStrength_51">
  <Name>CyclicYieldStrength</Name>
    <Units description="Newton pro Quadratmillimeter" name="N/mm^2(MPa)">
     <Unit>
       <Name>N/mm^2(MPa)</Name>
     </Unit>
    </Units>
</PropertyDetails>
<PropertyDetails id="CyclicStrengthCoeff_52">
  <Name>CyclicStrengthCoeff</Name>
    <Units description="Newton pro Quadratmillimeter" name="N/mm^2(MPa)">
      <Unit>
       <Name>N/mm^2(MPa)</Name>
      </Unit>
   </Units>
</PropertyDetails>

Nun war meine Idee diesen Bereich in einen Smartformstext zu speichern und den dann einfach mit ins XML zu schreiben. Aber wie kann ich nach der eigentlichen Datensektion noch den Inhalt einer TLINE-Tabelle vor dem Ende-Tag des XMLs einfügen. Keine der Methoden im ixml scheint mir dafür geeignet.

Für Eure Hilfe bin ich wie immer sehr Dankbar.

Beste Grüße
Jens

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: XML Block einfügen

Beitrag von sapnup (ForumUser / 42 / 14 / 12 ) »
Hallo Jens, mein Ansatz wäre eine kleine XSL-Transformation (F1 auf CALL TRANSFORMATION und google nach XSLT) zu schreiben, die deine einzufügende XML an die gewünschten Knoten hängt. Die XSLT-Syntax habe ich auf Anhieb nicht parat, sie lässt sich aber nach meiner Erfahrung leicht zusammengoogeln. Falls nicht kannst du ja nochmal rückfragen.

Gruß

Re: XML Block einfügen

Beitrag von Prego (Specialist / 106 / 22 / 1 ) »
Hallole,

ich hasse XSLT. Aber ich fürchte das ich da nicht herum kommen werde. Ich schaue mir das Morgen mal an und melde mich auf jeden Fall wieder.
Vielen Dank schon mal für den Tipp.

Grüße
Jens

Re: XML Block einfügen

Beitrag von Prego (Specialist / 106 / 22 / 1 ) »
Ok, es scheint das ich da doch etwas Hilfe brauche. Ich hab mir jetzt folgende XSLT zusammengegoogelt. Sprich, ich habe meine Material.xml und meine Meta.xml die in einem neuen Document unter dem Tag MatML_Doc zusammengeführt werden sollen.

Code: Alles auswählen.

<?xml version="1.0" ?>
<xsl:transform
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:template match="/MatML_Doc">
        <xsl:copy>
            <xsl:copy-of select="document('Material.xml')" />
            <xsl:copy-of select="document('Meta.xml')" />
        </xsl:copy>
    </xsl:template>
</xsl:transform>
Aber wie rufe ich das auf? Aus der SAP-Doku werde ich nicht wirklich schlau wie ich jetzt die 2 Quelldaten da mitgeben soll.

Grüße
Jens

Re: XML Block einfügen

Beitrag von Legxis (Specialist / 160 / 90 / 28 ) »
Prego hat geschrieben:Aber wie rufe ich das auf? Aus der SAP-Doku werde ich nicht wirklich schlau wie ich jetzt die 2 Quelldaten da mitgeben soll.

Code: Alles auswählen.

    CALL TRANSFORMATION (name)
              SOURCE (bezeichnung) = table1
                     (bezeichnung) = table2
              RESULT XML (out).

Folgende Benutzer bedankten sich beim Autor Legxis für den Beitrag:
Prego

( SAP ECC 6.0, NetWeaver 7.0, ohne unicode, ohne support/enhancement packages )

Re: XML Block einfügen

Beitrag von Prego (Specialist / 106 / 22 / 1 ) »
Sorry, ich versteh es nicht

Ganz konkret 2 XML

XML1

Code: Alles auswählen.

<?xml version="1.0" encoding="utf-8"?>
<Material>
  <BulkDetails/>
</Material>                                                                                                                                                                                       
<Material>
  <BulkDetails/>
</Material>
XML2

Code: Alles auswählen.

<?xml version="1.0" encoding="utf-8"?>
<MetaDaten>
 <Properties/>
</MetaDaten> 
sollen in diese XML zusammengeführt werden.

Code: Alles auswählen.

<?xml version="1.0" encoding="utf-8"?>
<MatML_Doc>
  <Material>
    <BulkDetails/>
  </Material>                                                                                                                                                                                       
  <Material>
    <BulkDetails/>
  </Material>  
  <MetaDaten>
    <Properties/>
  </MetaDaten>      
</MatML_Doc>
die 2 Quellxml habe ich sowohl als xstring table und als Referenz auf die iXml-Document vorliegen. Aber egal mit welchen Parametern ich die Transformation aufrufe, kommt entweder eine leeres File oder absoluter Käse raus:

zB:

Code: Alles auswählen.

<?xml version="1.0" encoding="utf-8"?>
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48TWF0ZXJpYWw+PEJ1bGtEZXRh
aWxzLz48L01hdGVyaWFsPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIA==PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48TWV0YURhdGVuPjxCdWxrRGV0
YWlsczIvPjwvTWV0YURhdGVuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIA==                 
Meine Transformation schaut so aus, wobei Material und Meta die Übergabeparameter sein sollen?

Code: Alles auswählen.

<?xml version="1.0" ?>
<xsl:transform
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:template match="/MatML_Doc">
        <xsl:copy>
            <xsl:copy-of select='Material' />
            <xsl:copy-of select='Meta' />
        </xsl:copy>
    </xsl:template>
</xsl:transform>
Der Aufruf wie folgt:

Code: Alles auswählen.

  call TRANSFORMATION zmerge_xml
  source   Material = l_xml_table_mat
           Meta     = l_xml_table_meta
  RESULT XML l_xml_table.
XSLT und ich werden definitiv keine Freunde mehr.

Re: XML Block einfügen

Beitrag von sapnup (ForumUser / 42 / 14 / 12 ) »
Hi Jens,

- wenn dein <Metadaten> Block immer gleich ist und
- wenn du deine <Material> Knoten unter einen gemeinsamen Knoten bringen kannst (zur not mit ein paar string-operationen)

kannst du sowas hier probieren:

Report:

Code: Alles auswählen.

REPORT  Z_XSLT.

data: lv_in   TYPE string,
         lv_out TYPE string.

lv_in = '<someNode><Material><BulkDetails/></Material><Material><BulkDetails/></Material></someNode>'.

CALL TRANSFORMATION Z_TRANFORMATION
       SOURCE XML lv_in     " lv_in kann auch vom typ xstring sein
       RESULT XML  lv_out.
Transformation:

Code: Alles auswählen.


<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">

  <xsl:strip-space elements="*"/>

  <xsl:template match="/">

    <MatML_Doc>

        <xsl:copy-of select="someNode/node()"/>
        <xsl:call-template  name='METADATEN' />

    </MatML_Doc>

  </xsl:template>

  <xsl:template name = "METADATEN">
  <!-- in diesem Template sind deine Metadaten hardgecodet(/gecopypastet), weil die eh immer gleich sind (oder?) -->
      <MetaDaten>

          <Properties/>

      </MetaDaten>

  </xsl:template>

</xsl:transform>

Aber das ist ziehmlich dirty, deshalb sag bitte niemandem, dass es von mir kommt :cry:

EDIT:

Auf den zweiten Blick: wenn die Metadaten-XML und die Material-XML jedes mal einfach an einander geklatscht und das Ergebnis in einen <MatML_Doc> Knoten verpackt werden muss, könntest du dir die Plagerei auch sparen und das ganze als strings behandeln, sie zerschnippeln und wieder zusammensetzen.

Wäre zwar noch dreckiger, würde aber ...

Folgende Benutzer bedankten sich beim Autor sapnup für den Beitrag:
Prego


Re: XML Block einfügen

Beitrag von Prego (Specialist / 106 / 22 / 1 ) »
Hehe,

perfetto. Vielen lieben Dank Euch beiden. Der letzte Hinweis von SAPNUP (er hat's gesagt, er hat's gesagt) war das fehlende Puzzlestückchen.

Gruß
Jens

PS: Hab ich schon erwähnt das XSLT und ich keine Freunde mehr werden :D

Seite 1 von 1

Vergleichbare Themen

3
Antw.
1280
Views
Block makieren
von dkast » 15.03.2019 10:39 • Verfasst in ABAP® Core
11
Antw.
5005
Views
Selektionsbild PSJ - Block Kostenarten ausblenden
von Kerstin » 06.02.2014 11:34 • Verfasst in Sonstige Module
0
Antw.
1131
Views
ALV BLOCK benötige den Parameter SAVE
von wreichelt » 20.09.2018 15:29 • Verfasst in ABAP® für Anfänger
5
Antw.
24724
Views
Selection-Screen Block komplett ausblenden (NO-DISPLAY)
von kylll » 27.03.2006 16:25 • Verfasst in ABAP® Core
0
Antw.
2527
Views
Solution Builder (Build Block Builder)
von SAP_ENTWICKLER » 19.12.2018 09:59 • Verfasst in Sonstige Module

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 8 Stunden von Bright4.5 1 / 172
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1814
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8417