Try OpenEdge Now
skip to main content
Working with XML
Reading and Writing XML Data from Temp-Tables and ProDataSets : Reading XML into a temp-table, temp-table buffer, or ProDataSet
 

Reading XML into a temp-table, temp-table buffer, or ProDataSet

The READ-XML( )method is used for loading data into static or dynamic temp-table, temp-table buffer, and ProDataSet objects from an XML document. Optionally, you can specify an XML Schema to create an ABL definition for a dynamic object or to verify the XML Schema against a static or dynamic object definition.
Here is the syntax for READ-XML( ). The method returns TRUE or FALSE to indicate if the operation was successful.

Syntax

READ-XML ( source-type, {file|memptr|handle|longchar}, read-mode, schema-location, override-default-mapping[, field-type-mapping[, verify-schema-mode]] )
source-type
A CHARACTER expression that specifies the source XML document type. Valid values are: "FILE", "MEMPTR", "HANDLE", and "LONGCHAR".
file
A CHARACTER expression that specifies the name of a file. You can specify an absolute pathname, a relative pathname (based on the current working directory), or a URL pathname. Valid URL protocols include FILE and HTTP (the HTTPS protocol is not supported). The AVM verifies that the file exists and is accessible.
memptr
A MEMPTR variable that contains the XML document text. The size of the MEMPTR variable must match the size of the XML document text.
handle
A WEB-CONTEXT system handle, X-document object handle, or X-noderef object handle.
longchar
A LONGCHAR variable that contains the XML document text.
read-mode
A CHARACTER expression that specifies the mode in which the READ-XML( ) method reads data from the XML document into a temp-table or ProDataSet member buffer. The expression must evaluate to "APPEND", "EMPTY", "MERGE", or "REPLACE". The default value is "MERGE".
The following table lists the READ-XML( ) method modes for reading data.
Table 22. READ-XML( ) method read modes
When the mode is . . .
The READ-XML( ) method . . .
APPEND
Reads data from the XML document into the ProDataSet or temp-table object by adding new records to the existing records, without performing any record comparisons. If a record from the XML document exists in the object (that is, it results in a duplicate unique key conflict), the method generates an error message and returns FALSE.
EMPTY
Empties the contents of the ProDataSet or temp-table object before reading in data from the XML document.
MERGE
Reads data from the XML document into the ProDataSet or temp-table object by merging new records with existing records in the table. If a record from the XML document exists in the object (that is, it results in a duplicate unique key conflict), the method does not replace the existing record. If the record from the XML document does not exist in the object, the method creates a new record.
REPLACE
Reads data from the XML document into the ProDataSet or temp-table object by merging new records with existing records in the table. If the record from the XML document exists in the object (that is, it results in a duplicate unique key conflict), the method replaces the existing record with the new record. If the record from the XML document does not exist in the object, the method creates a new record.
schema-location
A CHARACTER expression that specifies the name of an external XML Schema file to use in creating or verifying the object's definition when reading in the XML document. You can specify an absolute pathname, a relative pathname (based on the current working directory), or a URL pathname. Valid URL protocols include FILE and HTTP (the HTTPS protocol is not supported). The AVM verifies that the file exists and is accessible. When specified, the AVM ignores any XML Schema defined or referenced in the source XML document.
If you specify the empty string ("") or the Unknown value (?), the AVM creates or verifies the object's definition using any XML Schema defined or referenced in the XML document.
override-default-mapping
A LOGICAL expression where TRUE directs the AVM to override the default mapping between XML Schema string and binary data types and ABL data types when creating a temp-table definition from an XML Schema. The default value is FALSE.
The XML Schema string data type maps to the ABL CHARACTER data type by default, and the XML Schema base64Binary and hexBinary data types map to the ABL RAW data type by default. If you specify TRUE, the READ-XML( ) method creates a temp-table schema with CLOB and BLOB fields instead of CHARACTER and RAW fields.
If you specify the Unknown value (?), the method uses the default value of FALSE.
Note: If the temp-table or ProDataSet has an ABL definition, this option is ignored.
field-type-mapping
An optional CHARACTER expression that evaluates to a comma-separated list of field name, data type pairs using the following syntax:
field-name-1, data-type-1[, field-name-n, data-type-n]...)
This option allows you to specify the ABL data type for a specific field from the XML Schema. Generally, this option is only used to map fields from non-ABL generated schema. When reading and writing ABL-generated XML Schema, there is little need to override field mappings because of the ABL extensions to standard XML Schema.
field-name
The name of the specified field. For a ProDataSet object, you must qualify the field name with the buffer name from the XML Schema: that is, buffer-name.field-name.
data-type
The target ABL data type of the specified field. The data type must be a valid ABL data type, and it must be compatible with the XML Schema type based on the ABL XML data type mapping rules. For example, any XML Schema type can be mapped to ABL CHARACTER or CLOB, but an XML Schema dateTime can be mapped only to an ABL DATE, DATETIME or DATETIME-TZ.
Note: If the temp-table or ProDataSet has an ABL definition, this option is ignored.
If you specify the Unknown value (?), the method uses the default data type mapping. For more information about the ABL XML data type mapping rules, see XML Schema and ABL Data Type Mappings.
verify-schema-mode
An optional CHARACTER expression that specifies the mode in which the READ-XML( ) method verifies any XML Schema against existing ABL definitions. The expression must evaluate to "IGNORE", "LOOSE", or "STRICT". The default value is "LOOSE".
Note: For a dynamic temp-table or ProDataSet member buffer that does not have an ABL definition (that is, the object is in the CLEAR state), this option is ignored.
The following table lists the READ-XML( ) method modes for schema verification.
Table 23. READ-XML( ) method schema verification modes
For this mode . . .
And this object . . .
The READ-XML( ) method . . .
IGNORE
Any
Ignores any XML Schema specified in schema-location, or defined in the XML document.
LOOSE
temp-table
Matches temp-table columns by name. The data type and extent of the column in the XML Schema must match those for the matching column in the temp-table. Other field attributes in the XML Schema are ignored. The XML Schema may be a subset or superset of the temp-table schema. Any columns that are in the XML Schema but not in the temp-table are ignored. Any columns that are in the temp-table, but not in the XML Schema, are ignored.
ProDataSet
Matches temp-tables and columns by name. The data type and extent of the column in the XML Schema must match those for the matching column in the temp-table. Other field attributes in the XML Schema are ignored. Data relationships are matched by parent buffer and child buffer names. For every data relationship in the XML Schema that matches a data-relation in the ProDataSet, the field mapping between the parent and child buffers must match. The XML Schema may be a subset or superset of the ProDataSet definition. Any temp-tables, columns, or data-relations that are in the ProDataSet, but not in the XML Schema, are ignored. For a dynamic ProDataSet object, the method adds temp-tables and data-relations to the object when the temp-tables and data-relations are defined in the XML Schema, but are not members of the ProDataSet. Fields are not added to existing temp-tables. For a static ProDataSet object, any temp-tables or data-relations that are in the XML Schema, but not in the ProDataSet, are ignored.
STRICT
temp-table
Matches temp-table columns by name. The data type and extent of the column in the XML Schema must match those for the matching column in the temp-table. Other field attributes in the XML Schema are ignored. The XML Schema must define a field for every temp-table field, and there can be no extra fields in the XML Schema that are not in the temp-table schema.
ProDataSet
Matches temp-tables and columns by name. There must be a temp-table defined in the XML Schema for each table of the ProDataSet. There can be no tables defined in the XML Schema that are not in the ProDataSet definition. There must be field defined in the XML Schema for each field in the temp-table, with the same data type and extent, and there can be no fields defined in the XML Schema that are not in the temp-table definition. There must also be a data relationship defined in the XML Schema for every data-relation in the ProDataSet, and there can be no data relationships defined in the XML Schema that are not defined in the ProDataSet. The field mapping between the parent and child buffers must match.
If you specify the Unknown value (?), the method uses the default value of LOOSE.
If the XML Schema verification fails, the method generates an error message indicating the XML Schema element that caused the failure and returns FALSE.
* Schema locations
* Reading XML data into temp-tables
* Adding XML data to a populated temp-table
* Reading XML into a ProDataSet
* Reading before-image data for ProDataSet temp-table buffers from XML