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/