jOOX and XSLT. An XML love story, continued
The somewhat functional way of thinking involved with jOOX’s XML manipulation cries for an additional API enhancement simply supporting XSLT. XSL transformation has become quite a standard way of transforming large amounts of XML into other structures, where normal DOM manipulation (or jOOX manipulation) becomes too tedious. Let’s have a look at how things are done in standard Java
Example input:
<books> <book id="1"/> <book id="2"/> </books>
Example XSL:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Match all books and increment their IDs -->
<xsl:template match="book">
<book id="{@id + 1}">
<xsl:apply-templates/>
</book>
</xsl:template>
<!-- Identity-transform all the other elements and attributes -->
<xsl:template match="@*|*">
<xsl:copy>
<xsl:apply-templates select="*|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Verboseness of XSL transformation in Java
The standard way of doing XSL transformation in Java is pretty verbose – as just about anything XML-related in standard Java. See an example of how to apply the above transformation:
Source source = new StreamSource(new File("increment.xsl"));
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(source);
DOMResult result = new DOMResult();
transformer.transform(new DOMSource(document), result);
Node output = result.getNode();
Drastically decrease verbosity with jOOX
With jOOX, you can write exactly the same in much less code:
Apply transformation:
// Applies transformation to the document element:
$(document).transform("increment.xsl");
// Applies transformation to every book element:
$(document).find("book").transform("increment.xsl");
The result in both cases is:
<books> <book id="2"/> <book id="3"/> </books>
From http://lukaseder.wordpress.com/2012/01/28/joox-and-xslt-an-xml-love-story-continued/
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)






Comments
Afandi Merathi replied on Fri, 2012/03/16 - 10:50am
I have used XSLT many times in the past and hate it for it’s verboseness and how hard it makes it to do simple things such as calling macros.
Take freemarker’s XML support for a spin and I’m sure you’ll find it to be much simpler, easier to read, less verbose and more powerful than XSLT.