Wednesday, March 2, 2016

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 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.

  1. 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.



<Order Type = "Weborder">
   <Customer>Mr. John</Customer>

Data Structure to recieve Data:

D Order           DS              
D  Type                         10A
D  Customer                     30A
D  Status                       10A


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.



<Order Type = "Weborder">
   <Customer Name = "Mr. John">
      <Address1>West Street</Address1>
      <Country>United States</Country>

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


XML-INTO Order %XML('/home/PReddy/Orders.xml' : 'doc=file')

Below are the few additional Options that can be used along with %XML BIF.

  1. path option
  2. doc option
  3. ccsid option
  4. case option
  5. trim option
  6. allow missing option
  7. allow extra option
  8. data subfield
  9. count prefix

Signing off with the basics. Click Here to see more details about XML.

No comments:

Post a Comment

How to Iterate Over a List and Get Indexes with 'enumerate' Function in Python

'enumerate' function There are different ways of accessing the data from a list like using range and then index or accessing the ele...