Peter

Had the same problem

IBM Support here in the UK were not as helpful as they might have been

After some thought am using the enclosed which came from another member of
this group

Have fun

Bob



      SUBROUTINE EWPARSER(XMLDOC,DATA_ARRAY,CRITICAL_ERROR)
*-----------------------------------------------------------------------*
*   This computer program is the sole copyright of EXPLORE WORLDWIDE.   *
*       It may not be copied, reproduced or used save as licenced.      *
*         Legal action will be taken against any infringement of        *
*                  copyright and or licence agreements.                 *
*                          All rights reserved.                         *
*                       (c) EXPLORE WORLDWIDE 2004                      *
*-----------------------------------------------------------------------*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*   Program:        EWPARSER
*   Author:         BOB WITNEY                                       *
*   Date Written:   June 2004
*   Installation:   EXPLORE WORLDWIDE LTD.,                            *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*   DESCRIPTION:                                                       *
*   INCOMING XML PARSER
*                                                                      *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*   AMENDMENTS:                                                        *
*   Version    Date       Description                                  *
*                                                                      *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Parse the XML document and return the fields as a Name/Value array
* Tags which do not immediately contain attributes or values are ignored
* (although they could be used as namespace extensions, couldn't they?
* Right now, this just takes the last tag name and the last value and sticks
* them together (might actually work in our case, but be aware).
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
      C.VERSION = '1.0'
      DATA_ARRAY = ""
      CRITICAL_ERROR = ""
      REPEATERS = ""
      WHITES = " ":CHAR(9):CHAR(13):CHAR(10)
      QUOTES = '"':"'"
      QUOTED = 0                         ; * 0 = not inside quotes, ' = inside
single quotes, " = inside double quotes
      TAGGED = ""                        ; * Flags whether inside or outside a
tag
      QTVALU = ""                        ; * Holds string found inside quotes
      TAGNAM = ""                        ; * Name of tag (once it has been
completely read)
      TAGNUM = 0                         ; * Current tag array placement
      TAGS = ""                          ; * Array of all tags
      LINECT = 1                         ; * Counts CHAR(13)
      CHARCT = 1                         ; * Counts chars since last CHAR(13)
      STRING = ""                        ; * The current name/value/whatever
being accumulated
      TAGVAL = ""                        ; * Value associated with the current
tag
      ATTNAM = ""                        ; * Name of attribute within the
current tag
      ATTVAL = ""                        ; * Value of attribute within the
current tag
      DBGLVL = ""
      TYPE = ""
      CT = LEN(XMLDOC)
      FOR ONE = 1 TO CT
        CH = XMLDOC[ONE,1]
        IF DBGLVL THEN
          PRINT
          PRINT "Current STRING   : `":STRING:"` + `":CH:"`"
          PRINT "Current TYPE     : `":TYPE:"`"
          PRINT "Current TAGNAM   : `":TAGS<1,TAGNUM>:"`"
          PRINT "Current VALUE    : `":TAGS<2,TAGNUM>:"`"
          PRINT "Current ATTNAM   : `":TAGS<3,TAGNUM>:"`"
          PRINT "Current ATTVAL   : `":TAGS<4,TAGNUM>:"`"
          PRINT "Press a key, D to DEBUG..."
          FOO = ""
          INPUT FOO
          IF UPCASE(FOO) = "D" THEN DEBUG
        END
        IF QUOTED THEN
          IF CH = QUOTED THEN          ; * End of quoted string
            QUOTED = 0
            BEGIN CASE
              CASE TYPE = "VALUE"
                TAGVAL = STRING
                STRING = ""
              CASE TYPE = "ATTRIB"
                ATTVAL = STRING
                STRING = ""
            END CASE
          END ELSE
            STRING := CH
          END
        END ELSE
          BEGIN CASE
            CASE TYPE = "TAG"
              BEGIN CASE
                CASE INDEX(QUOTES,CH,1) > 0
                  CRITICAL_ERROR = "INVALID CHARACTER (":CH:") IN TAG NAME
":STRING
                  GOTO ENDOFITALL
                CASE CH = "?"       ; * Bogus character
                  NULL
                CASE CH = "<"
                  CRITICAL_ERROR = "INVALID CHARACTER (":CH:") IN TAG NAME
":STRING
                  GOTO ENDOFITALL
                CASE CH = ">"       ; * End of tag
                  TAGNAM = STRING
                  STRING = ""
                  TYPE = ""
                CASE INDEX(WHITES,CH,1) > 0   ; * End of tag name, start of
attribute
                  TAGNAM = STRING
                  STRING = ""
                  TYPE = "ATTRIB"
                CASE 1
                  STRING := CH
              END CASE
            CASE TYPE = "ATTRIB"
              BEGIN CASE
                CASE INDEX(QUOTES,CH,1) > 0
                  QUOTED = CH
                CASE CH = "?"       ; * Bogus character
                  NULL
                CASE CH = "<"
                  CRITICAL_ERROR = "INVALID CHARACTER (":CH:") IN ATTRIBUTE
":STRING
                  GOTO ENDOFITALL
                CASE CH = ">"
                  TYPE = "VALUE"
                CASE INDEX(WHITES,CH,1) > 0   ; * Ignore spaces outside of
quotes
                  NULL
                CASE CH = "="
                  IF ATTNAM = "" THEN
                    ATTNAM = STRING
                    STRING = ""
                  END ELSE
                    ATTVAL = STRING
                    STRING = ""
                  END
                CASE 1
                  STRING := CH
              END CASE
            CASE TYPE = "VALUE"
              BEGIN CASE
                CASE INDEX(QUOTES,CH,1) > 0
                  QUOTED = CH
                CASE CH = "<"
                  TAGVAL = STRING
                  STRING = ""
                  TYPE = "TAG"
                CASE CH = "?"       ; * Bogus character
                  NULL
                CASE CH = ">"
                  CRITICAL_ERROR = "INVALID CHARACTER (":CH:") IN VALUE
":STRING
                CASE INDEX(WHITES,CH,1) > 0
                  IF CH = CHAR(13) OR CH = CHAR(10) THEN
                    LINECT += 1
                  END ELSE
                    STRING := CH
                  END
                CASE 1
                  STRING := CH
              END CASE
            CASE 1
              IF CH = "<" THEN
                TYPE = "TAG"
              END ELSE
                STRING = CH
                TYPE = "VALUE"
              END
          END CASE
        END
        IF TAGNAM <> "" THEN            ; * SAVE TAG NAME
          IF TAGNAM[1,1] = "/" THEN
            IF DBGLVL THEN PRINT "Skipping endtag  : `":TAGNAM:"`"
          END ELSE
            TAGNUM += 1
            IF DBGLVL THEN PRINT "Saving TAGNAM    : `":TAGNAM:"` in position
":TAGNUM
            TAGS<1,TAGNUM> = TAGNAM
          END
          TAGNAM = ""
        END
        IF TAGVAL <> "" THEN            ; * SAVE TAGVAL UNDER LAST TAG
          IF DBGLVL THEN PRINT "Saving TAGVAL     : `":TAGVAL:"` under TAG
`":TAGS<1,TAGNUM>:"`"
          TAGS<2,TAGNUM> = TAGVAL
          TAGVAL = ""
        END
        IF ATTNAM <> "" AND ATTVAL <> "" THEN     ; * SAVE ATTRIBUTE NAME,
VALUE
          IF DBGLVL THEN PRINT "Saving ATTNAM    : `":ATTNAM:"` with ATTVAL
`":ATTVAL:"` under TAG `":TAGS<1,TAGNUM>:"`"
          TAGS<3,TAGNUM,-1> = ATTNAM
          TAGS<4,TAGNUM,-1> = ATTVAL
          ATTNAM = ""
          ATTVAL = ""
        END
      NEXT ONE
      DATA_ARRAY = TAGS
ENDOFITALL:
      IF CRITICAL_ERROR <> "" THEN CRITICAL_ERROR := " AT COLUMN ":CHARCT:" ON
LINE ":LINECT
      RETURN
    END

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Behalf Of Peter Veenhof
Sent: 20 July 2004 13:34
To: [EMAIL PROTECTED]
Subject: [U2] u2 XML


I've seen this discussed before, but have never seen any working examples.
Even the examples in the PDF's from IBM do not work.

I have this mapping file (CDSPVTestData.map):

<U2xml root="CDSPVTestData"/>
<U2xml record="PVTestData"/>
<U2xml file="PV.TESTDATA"
      FIELD="KEY"
      map-to='MyID'
      type='S'
      treated-as='element'
/>
<U2xml file="PV.TESTDATA"
      FIELD="MYNAME"
      map-to='MyName'
      type='S'
      treated-as='element'
/>
<U2xml file="PV.TESTDATA"
      FIELD="MYCODE"
      map-to='MyCode'
      type='S'
      treated-as='element'
/>

And this BASIC program (XMLTEST):

CALL OPEN("PV.DEV",PV.DEV.FILE)
STATUS = XMLEXECUTE("SELECT KEY,MYNAME,MYCODE, 'RVK' ACCT FROM PV.TESTDATA
TOXML ELEMENTS XMLMAPPING 'CDSPVTestData.map'","",XMLVAR,SVAR)
PRINT XMLVAR
WRITE XMLVAR ON PV.DEV.FILE,"TEST.XML"
STOP

Which successfully generate this XML (TEST.XML):

<?xml version="1.0"?>
<CDSPVTestData>
<PVTestData>
  <MyID>1</MyID>
  <MyName>MY TEST NAME</MyName>
  <MyCode>MY TEST CODE</MyCode>
  <ACCT>RVK</ACCT>
</PVTestData>
</CDSPVTestData>

Now here is the hard part..... I just want to use XML extraction as shown in
the Chapter 7 of the BasicExt.pdf, so I write this program (XMLTESTEXT):

#INCLUDE UNIVERSE.INCLUDE XML.H
STATUS=PrepareXML("PV.DEV/TEST.XML",TEST_XML)
IF STATUS=XML.ERROR THEN
   STATUS=XMLError(errmsg)
   PRINT errmsg
   STOP
END
STATUS = OpenXMLData(TEST_XML,"&XML&/CDSPVTestData.ext",TEST_XML_DATA)
IF STATUS=XML.ERROR THEN
   STATUS=XMLError(errmsg)
   PRINT errmsg
   STOP
END
STOP

And have this extraction map (CDSPVTestData.ext):

<U2xml-extraction>
<file-extraction start="/CDSPVTestData/PVTestData"
dictionary="D_PV.TESTDATA" null="EMPTY"/>
<FIELD-extraction FIELD="KEY" path="PVTestData,MyID/text()"/>
<FIELD-extraction FIELD="MYNAME" path="PVTestData,MyName/text()"/>
<FIELD-extraction FIELD="MYCODE" path="PVTestData,MyCode/text()"/>
</U2xml-extraction>

When I run this XMLTESTEXT, I get this error:

"U2XMAP: Illegal U2XMAP file, missing the <U2XMAP>."


Anybody able to help? I've tried various other incarnations of the EXT file
from chapter 7 in the pdf but with no results. Chapter 7 doesn't even
mention the U2XMAP file. I do find U2XMAP file later on in documentation but
I can't see how it relates.

Thanks,
Peter
This email and any attachments are intended solely for use of the named
addressee.If you received this email in error please notify the sender by
return e-mail, delete this e-mail, and refrain from any disclosure or action
based on the information.
-------
u2-users mailing list
[EMAIL PROTECTED]
To unsubscribe please visit http://listserver.u2ug.org/

______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email
______________________________________________________________________

______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email
______________________________________________________________________

[demime 1.01d removed an attachment of type application/octet-stream which had a name 
of EWPARSER]
-------
u2-users mailing list
[EMAIL PROTECTED]
To unsubscribe please visit http://listserver.u2ug.org/

Reply via email to