[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jul 2001
    Beiträge
    29

    Red face XML Extender for iSeries (die Zweite)

    So, mein "XML Extender for iSeries" läuft.

    Ich habe auch schon ein XML-File erfolgreich "zerlegt", sprich, die Inhalte der Elmente und Attribute in eine phys.Datei übertragen. Dabei war das XML-File "flach" aufgebaut, also ohne Elemente die sich wiederholen können und es hat in eine einzige phys.Datei reingepasst.

    So weit so gut.

    Zum "zerlegen" in mehrere Dateien fehlt mir aber noch etwas KnowHow.

    Beispiel:

    <NettoPreise>
    <ArtikelNR>692960603</ArtikelNR>
    <ArtikelBez.>Schraube M14</ArtikelBez.>
    <Waehrung>EUR</Waehrung>
    <Preis gueltig="2006010120061231">99.95</Preis>
    <StaffelPreise>
    <Staffel gueltig="2006010120061231" Menge="10">98.95</Staffel>
    <Staffel gueltig="2006010120061231" Menge="100">97.95</Staffel>
    <Staffel gueltig="2006010120061231" Menge="1000">96.95</Staffel>
    </StaffelPreise>
    </NettoPreise>

    Bei diesem XML-File müssen die Daten in zwei phys.Dateien (Nettopreise und Staffelpreise) zerlegt werden, weil die "StaffelPreise" 0 bis unendlich vorkommen, so die Dekompositionsregel des Extenders.

    Ich habe mir deshalb zwei phys.Dateien erstellt, beide haben den Schlüssel "ArtikelNR", was mir fehlt ist der Trick wie ich den Inhalt vom Schlüssel NettoPreise.ArtikelNR in den Schlüssel StaffelPreise.ArtikelNR reinbekomme.

    Ich hoffe ich habe mich richtig ausgedrückt. Das ganze ist doch ein bisschen heavy.

    Gruß Alex

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Du kannst dir XML als Baumstruktur vorstellen.
    In diesem Fall ist eben "Staffelpreise" ein Unterast von "Nettopreise" und somit gilt der Schlüssel "ArtikelNR" des übergeordneten Astes.

    D.h., dass die letzte verwendete ArtikelNR für die Staffelpreise gilt.
    Allerdings:
    XML ist nicht zwingend in der Reihenfolge !
    D.h., dass ArtkelNR durchaus nach Staffelpreise kommen kann.

    Bei der Verarbeitung kommt es eben darauf an, erst alle Hauptattribute zu verarbeiten bevor man an die untergeordneten geht.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jul 2001
    Beiträge
    29
    Klaro, XML ist hierarchisch aufgebaut. Mit root-Element, Eltern und Kindern usw.
    Auf die Vearbeitung habe ich wenig Einfluss, das soll ja der Extender erledigen. Ich habe lediglich dieses DAD-File, welches für das Zerlegen benötigt wird. Dieses File, ebnfalls in XML, wird mir automatisch vom WebsphereDevelpStudioClient bei der Aktion RDB-Node-mapping erstellt. Es ist zwar editierbar, aber ich weiss nicht wo ich da eingreifen kann/muss.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Da kann ich dir nun auch nicht weiterhelfen.
    Aber ich denke, bei der Mappingfunktion muss es auch eine Abbildung auf hierarchische Datenbankstrukturen geben.
    Ggf. wird hier nicht direkt mit den Schlüsseln gearbeitet sondern mit Referenzen. Meist sind dies automatisch generierte ID's die den Bezug zwischen den Ebenen (Eltern->Kind) herstellen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Jul 2001
    Beiträge
    29
    OK, trotzdem vielen Dank. Ich mach mich weiter auf die Suche nach einer Lösung, die ich, falls gewünscht, hier präsentieren werde.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Eine Präsentation der Lösung ist immer willkommen, schließlich wird im Forum ja erst nach Antworten gesucht, bevor man eine eigene Frage stellt
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Jul 2001
    Beiträge
    29
    Hi,

    hier die Lösung bzw. der Weg den ich gegangen bin.
    Für Rückfragen stehe ich gerne zur Verfügung.

    ------------------------------------------------------------------------

    Das ist das empfangene XML-Document.

    XML-File:

    <?xml version="1.0" encoding="UTF-8"?>
    <neuePreise>
    <NettoPreise>
    <ArtikelNR>692960603</ArtikelNR>
    <ArtikelBez>Schraube M14</ArtikelBez>
    <Waehrung>EUR</Waehrung>
    <Preis gueltig="2006010120061231">99.95</Preis>
    <StaffelPreise>
    <Staffel gueltig="2006010120061231" Menge="10">98.95</Staffel>
    <Staffel gueltig="2006010120061231" Menge="100">97.95</Staffel>
    <Staffel gueltig="2006010120061231" Menge="1000">96.95</Staffel>
    </StaffelPreise>
    </NettoPreise>
    </neuePreise>


    --------------------------------------------------------------------------
    Nicht erschrecken, dieses File wurde automat. mit WDSC 5.1 erstellt.
    Das muß man/frau nicht selber reinklopfen.

    DAD-File:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE DAD PUBLIC "dadId" "dad.dtd">
    <DAD>
    <dtdid>Test01.dtd</dtdid>
    <validation>NO</validation>
    <Xcollection>
    <prolog>?xml version="1.0"?</prolog>
    <doctype>!DOCTYPE neuePreise PUBLIC "Test01Id" "Test01.dtd"</doctype>
    <root_node>
    <element_node name="neuePreise">
    <RDB_node>
    <table name="deinebibl.NETTPRS" key="ARTIKELNR"/>
    <table name="deinebibl.STAFFPR" key="ARTIKELNR GUELTIG MENGE"/>
    <condition>
    deinebibl.NETTPRS.ARTIKELNR=deinebibl.STAFFPR.ARTI KELNR
    </condition>
    </RDB_node>
    <element_node name="NettoPreise" multi_occurrence="YES">
    <element_node name="ArtikelNR">
    <text_node>
    <RDB_node>
    <table name="deinebibl.NETTPRS"/>
    <column name="ARTIKELNR" type="Character(20)"/>
    </RDB_node>
    </text_node>
    </element_node>
    <element_node name="ArtikelBez">
    <text_node>
    <RDB_node>
    <table name="deinebibl.NETTPRS"/>
    <column name="ARTIKELBEZ" type="Character(40)"/>
    </RDB_node>
    </text_node>
    </element_node>
    <element_node name="Waehrung">
    <text_node>
    <RDB_node>
    <table name="deinebibl.NETTPRS"/>
    <column name="WAEHRUNG" type="Character(3)"/>
    </RDB_node>
    </text_node>
    </element_node>
    <element_node name="Preis">
    <text_node>
    <RDB_node>
    <table name="deinebibl.NETTPRS"/>
    <column name="PREIS" type="Decimal(9,2)"/>
    </RDB_node>
    </text_node>
    <attribute_node name="gueltig">
    <RDB_node>
    <table name="deinebibl.NETTPRS"/>
    <column name="GUELTIG" type="Character(16)"/>
    </RDB_node>
    </attribute_node>
    </element_node>
    <element_node name="StaffelPreise">
    <element_node name="Staffel" multi_occurrence="YES">
    <text_node>
    <RDB_node>
    <table name="deinebibl.STAFFPR"/>
    <column name="STAFFEL" type="Decimal(9,2)"/>
    </RDB_node>
    </text_node>
    <attribute_node name="gueltig">
    <RDB_node>
    <table name="deinebibl.STAFFPR"/>
    <column name="GUELTIG" type="Character(16)"/>
    </RDB_node>
    </attribute_node>
    <attribute_node name="Menge">
    <RDB_node>
    <table name="deinebibl.STAFFPR"/>
    <column name="MENGE" type="Decimal(6,0)"/>
    </RDB_node>
    </attribute_node>
    </element_node>
    </element_node>
    </element_node>
    </element_node>
    </root_node>
    </Xcollection>
    </DAD>
    --------------------------------------------------------------------------

    In diese zwei Dateien wird das XML-Document "zerlegt".
    Diese Dateien natürlich als erstes erstellen.

    SQL-Anweisung:

    CREATE TABLE deinebibl.NettPrs (
    ArtikelNR CHAR (20) primary key,
    ArtikelBez CHAR (40),
    Waehrung CHAR (3),
    Preis dec (9,2),
    gueltig CHAR (16));

    CREATE TABLE deinebibl.StaffPr (
    ArtikelNR CHAR (20),
    Staffel dec (9,2),
    gueltig CHAR (16),
    Menge dec (6,0),
    PRIMARY KEY (ArtikelNR, gueltig, Menge),
    foreign key (ArtikelNR) references deinebibl.NettPrs(ArtikelNR));
    --------------------------------------------------------------------------

    Ergebnis:

    Der XML-Extender hat das XML-Document schön sauber auf zwei Tabellen zerlegt.


    Physische Teildatei anzeigen
    Datei . . . . . : NETTPRS Bibliothek . . . : deinebibl
    Teildatei . . . : NETTPRS Satz . . . . . . : 1
    Steuerung . . . : Spalte . . . . . : 1
    Suchen . . . . . :
    *...+....1....+....2....+....3....+....4....+....5 ....+....6....+....7....+....8....
    692960603 Schraube M14 EUR r^2006010120061231

    ****** DATENENDE ******


    Physische Teildatei anzeigen
    Datei . . . . . : STAFFPR Bibliothek . . . : deinebibl
    Teildatei . . . : STAFFPR Satz . . . . . . : 1
    Steuerung . . . : Spalte . . . . . : 1
    Suchen . . . . . :
    *...+....1....+....2....+....3....+....4....+
    692960603 i^2006010120061231
    692960603 `^2006010120061231
    692960603 Ñ^2006010120061231
    ****** DATENENDE ******

    Gruß mom

Similar Threads

  1. XML Extender for iSeries
    By mom in forum IBM i Hauptforum
    Antworten: 30
    Letzter Beitrag: 22-01-07, 15:03
  2. Webservices, SOAP, XML und Labeldruck
    By vige1000 in forum NEWSboard Linux
    Antworten: 4
    Letzter Beitrag: 21-12-06, 11:56
  3. XML zu einem Port Senden
    By Weki in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 11-09-06, 13:31
  4. Formfeed in XML
    By kuempi von stein in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 05-07-06, 08:50
  5. DB2 XML Extender
    By Jenne in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 29-03-06, 09:49

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •