6.5. Variable Substitution and XML Parsing

Problem

You need to parse XML that contains references to variables, and you need to replace these references with variable values at parse time.

Solution

Use Commons Digester’s MultiVariableExpander and the VariableSubstitutor to expand variable references in an XML document during a parse.

Warning

This recipe explores a feature of Commons Digester—variable substitution—which is available only with a prerelease version of Digester, 1.6-dev. To follow the example in this recipe, you must download a nightly snapshot distribution from http://cvs.apache.org/builds/jakarta-commons/nightly/. Use nightly distributions of Commons components at your own risk; these distributions may contain unresolved bugs.

The following XML document contains four variable references—${email.to}, ${order.id}, ${user.name}, and ${product.name}—all of which need to be replaced with values before the XML is parsed by the Digester:

<?xml version="1.0"?>

<email to="${email.to}" from="ceo@xyzblah.com">
  <subject>Purchase Confirmation: ${order.id}</subject>
  <priority>High</priority>
  <message>
    Dear ${user.name}, we appreciate your business. As CEO
    of Big Software Company, Inc., I would like to
    personally thank you for helping us become filthy rich.
    Your purchase of ${product.name} helped me purchase an 
    even larger boat for myself.  Thanks again.
  </message>
</email>

This document represents a purchase confirmation message, and your system needs to unmarshall the above message ...

Get Jakarta Commons Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.