Scenario

Create a simple XML document.


Our data is two single valued elements and a table of information represented as and array or arrays.

Our JSON file looks like:

{
   "START_TIME" : "2012-084T15:02:23",
   "STOP_TIME": "2012-084T21:13:44",
   "RECORDS": [
      [ "Uplink Carrier Phase Table", "00", "C132,0", "182", "22268" ] ,
      [ "Downlink Carrier Phase Table", "01", "C133", "4052776", "378", "18605" ] ,
      [ "Uplink Sequential Ranging Phase Table", "02", "C132", "11085466", "214", "16571" ] ,
      [ "Downlink Sequential Ranging Phase Table", "03", "C133", "14631660", "324", "32" ] ,
      [ "Sequential Ranging Table", "07", "C134", "14642028", "350", "32" ] ,
      [ "Ramps Table", "09", "C132", "14653228", "144", "76" ] ,
      [ "DRVID Table", "11", "C134", "14664172", "202", "32" ] ,
      [ "Carrier Observable Table", "16", "C134", "14670636", "220", "307" ] ,
      [ "Total Phase Table", "17", "C134", "14738176", "236", "307" ]
  ]
}

The RECORDS element is an array of arrays which is one way to store a table of information in JSON.

We will store this in a file called example-1.json.

Our velocity template looks like:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<doc>
   <start>$json.START_TIME</start>
   <stop>$json.STOP_TIME</stop>
   <description>Hello from JSON test</description>
#foreach ($record in $json.RECORDS)
	<record>
	    <first>$record.get(0)</first>
#foreach ($field in $record)
		<field>$field</field>
#end
	</record>
#end
</doc>

We will store this in a file called example-1.vm.

The template uses #foreach to process the each record and a second #foreach to process each element in a record. The template also demonstrates how to access a specific element using the .get() method for arrays.

$ java -jar igpp.docgen json:example-1.json example-1.vm

Instructs igpp.docgen to parse the file "example-1.json" and place the results in a context named "json". Since the extension on "example-1.json" is ".json" igpp.docgen will parse the file JSON data, creating a parameter for each element.

Running this command will generate a plain text that looks like:

<?xml version="1.0" encoding="UTF-8"?>
<doc>
   <start>2012-084T15:02:23</start>
   <stop>2012-084T21:13:44</stop>
   <description>Hello from JSON test</description>
	<record>
	    <first>Uplink Carrier Phase Table</first>
		<field>Uplink Carrier Phase Table</field>
		<field>00</field>
		<field>C132,0</field>
		<field>182</field>
		<field>22268</field>
	</record>
	<!-- more records in actual output -->
</doc>