Scenario

Using tables with known structures, create a simple XML document using the contents of table with a known structure.


Our data is a table that contains information about projects. It has three fields: id, project name and a version. We want to create an XML document which conforms to a particular schema.

Our data table is in CSV format and looks like:

# Example table data.
id,project,version
apple,Appleseed,version-1
orange,OrangeBlossom,version-2

We will store this in a file called projects.csv.

Our velocity template looks like:

<!-- Example use of table data with Velocity -->
<!-- Source table should have at least three columns with the names "id", "project", and "version" -->
<Doc>
   <records>${table.records.size()}</records>
   <table>
   #foreach ($record in $table.records) 
      <record>
         <name>$record.id</name>
         <project>$record.project</project>
         <version>$record.version</version>
      </record>
   #end
   </table>
</Doc>

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

In the template we expect our table to be in a context called "table" (which is established on the command line - see below). We will output a count of the number of records in the table (${table.record.size()}) and for each record we will output the value for each field marked up with XML tags.

Running igpp.docgen with the command:

$ java -jar igpp.docgen table:projects.csv example-known.vm

Instructs igpp.docgen to parse the file "projects.csv" and place the results in a context named "table". Since the extension on "projects.csv" is ".csv" igpp.docgen will parse the file as a set of comma separated values, creating a record for each non-commented line in the file.

Running this command will generate an XML document that looks like:

<?xml version="1.0" encoding="UTF-8"?>
<Doc>
   <records>2</records>
   <table>
      <record>
         <id>apple</id>
         <project>Appleseed</project>
         <version>version-1</version>
      </record>
      <record>
         <id>orange</id>
         <project>OrangeBlossom</project>
         <version>version-2</version>
      </record>
   </table>
</Doc>