Working with XML in RPGLE : XML-INTO
Working with XML in RPGLE
XML has been one of the best format to pass a communication message between different Applications/Servers. This can be easily readable by both Humans & Machines.With the introduction of XML-INTO Opcode in RPGLE, Reading XML has become easier in RPG.
XML-INTO:
XML-INTO is an Opcode introduced for RPG programmers to retrieve XML data directly to RPG Variable. This Opcode need to be used in conjuction with %XML & %HANDLER.This can be used in both Free & Fixed Formats. Yet, There will be limitations for using in fixed format.
- One of the Main Reasons being the its limitation on Number of digits.
XML-INTO parses an XML document extracting a single element directly into a variable (Or an array). Usually, This will be used to extract multiple elements and values will be populated to Data Structure.
But, This approach would be better suited if number of items retrieved is known.
The basic syntax of the basic variant of XML-INTO is:
XML-INTO { (E H} } variable %XML( xmlDoc { : options } );
E - will set on %Error BIF if there is any occured while parsing xml.
H - will be used if we require any numeric to be rounding during charecter - numeric conversion.
But, These are Optional. And, cannot be using in Fixed format.
variable - This parameter can be a simple variable or an array or Data Structure based on XML.
The parser will be looking to match the names, nesting levels of the fields in the receiver with element and attribute names as per XML.
Here is a Small example to show how the data will be parsed into RPG variable.
E.g.:
XML:
<Order Type = "Weborder">
<Number>123456789</Number>
<Customer>Mr. John</Customer>
<Status>Despatched</Status>
</Order>
Data Structure to recieve Data:
D Order DS
D Type 10A
D Customer 30A
D Status 10A
Statement:
XML-INTO Order %XML('/home/PReddy/Orders.xml' : 'doc=file')
This Statement will retrieve the xml data directly into Data Structure "Order".
Here is one more example on how the data can be retrieved if there are multiple layers of data.
This can be done using Nested Data Structures.
E.g.:
XML:
<Order Type = "Weborder">
<Number>123456789</Number>
<Customer Name = "Mr. John">
<Address1>West Street</Address1>
<Address2>xxxxxxxxxxx</Address2>
<Country>United States</Country>
<Status>Despatched</Status>
</Order>
Data Structure:
D Order DS
D Type 10A
D Customer LikeDs(wCustomer)
D Status 10A
D wCustomer DS
D Name 30A
D Address1 30A
D Address2 30A
D Country 25A
Statement:
XML-INTO Order %XML('/home/PReddy/Orders.xml' : 'doc=file')
Below are the few additional Options that can be used along with %XML BIF.
- path option
- doc option
- ccsid option
- case option
- trim option
- allow missing option
- allow extra option
- data subfield
- count prefix
Signing off with the basics. Click Here to see more details about XML.
Comments
Post a Comment