1. XSLT
XSLT allows to convert XML to other format. XSLT stands for XSL
Transformations. The Eclipse XSL
Project allows to edit XSLT files and
perform interactive XSL
transformations in Eclipse.
For an introduction to XML please see
Java and XML Tutorial
.
3. Your first transformation - copy
We start first with a simplest transformation possible; no
transformation at all. Create a new Java project "de.vogella.xslt.first". Create a
folder "files".
Create the following XML file "source.xml" in the folder "files".
<?xml version="1.0"?>
<!-- This is a comment -->
<people>
<address type="personal">
<name>Lars </name>
<street> Test </street>
<telephon number="0123" />
</address>
<address type="personal">
<name>Joe </name>
<street> Test2 </street>
<telephon number="1234" />
</address>
<address type="business">
<name>Jim</name>
<street> Test3 </street>
<telephon number="2345" />
</address>
</people>
Create the following XLS file "transform.xsl" in the folder "files"
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" />
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Select your xsl file and run it as XSL application.
Select "Open Files..." and select "source.xml". Press ok to run
it.
Review the result "source.out.xml"
4. Your first transformation
We want to do a real transformation. Create the following
"transform2.xsl" and run it with the same input file
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" />
<!-- Copy everything -->
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<!-- Do some adjustments for the address -->
<xsl:template match="address">
<xsl:element name="place-where-person-live">
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<!-- Put the name in a <hubba> tag -->
<xsl:template match="name">
<xsl:element name="name">
<hubba>
<xsl:apply-templates />
</hubba>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
The result should look like the following.
<?xml version="1.0" encoding="UTF-8"?><people>
<place-where-person-live>
<name><hubba>Lars </hubba></name>
<street> Test </street>
<telephon number="0123"/>
</place-where-person-live>
<place-where-person-live>
<name><hubba>Joe </hubba></name>
<street> Test2 </street>
<telephon number="1234"/>
</place-where-person-live>
<place-where-person-live>
<name><hubba>Jim</hubba></name>
<street> Test3 </street>
<telephon number="2345"/>
</place-where-person-live>
</people>