Converting one XML format to another in Java typically
involves transforming the source XML using XSLT (Extensible Stylesheet Language
Transformations). XSLT is a powerful language for transforming XML documents
into other XML documents (or other formats like HTML, plain text, etc.).
Here's a step-by-step guide on how to perform XML to XML
transformation in Java using XSLT:
Step 1: Create the XSLT Stylesheet
First, you need to create an XSLT stylesheet that defines
how to transform the source XML to the target XML.
example.xsl:
xml
<?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="node()">
<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">
<nickName>
<xsl:apply-templates />
</nickName>
</xsl:element>
</xsl:template> </xsl:stylesheet> |
Step 2: Create the Source XML
Create the source XML file that you want to transform.
source.xml:
xml
<?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> |
Step 3: Write the Java Code for Transformation
Use Java's built-in libraries to apply the XSLT stylesheet
to the source XML.
XmlTransformer.java:
java
import
javax.xml.transform.*; import
javax.xml.transform.stream.StreamResult; import
javax.xml.transform.stream.StreamSource; import
java.io.File; public class
XmlTransformer { public static void main(String[] args) { try { // Source XML file File xmlFile = new
File("source.xml"); // XSLT stylesheet file File xsltFile = new
File("example.xsl"); // Create Source objects for the
XML and XSLT files Source xmlSource = new
StreamSource(xmlFile); Source xsltSource = new
StreamSource(xsltFile); // Create a TransformerFactory TransformerFactory
transformerFactory = TransformerFactory.newInstance(); // Create a Transformer for the
XSLT stylesheet Transformer transformer =
transformerFactory.newTransformer(xsltSource); // Create a Result object for the
transformed XML output File transformedXmlFile = new
File("transformed.xml"); Result result = new
StreamResult(transformedXmlFile); // Perform the transformation transformer.transform(xmlSource,
result);
System.out.println("Transformation complete. Output saved to
" + transformedXmlFile.getAbsolutePath()); } catch (Exception e) { e.printStackTrace(); } } } |
Explanation
- Create
Source and Result Objects:
- Source
xmlSource = new StreamSource(xmlFile);
- Source
xsltSource = new StreamSource(xsltFile);
- Result
result = new StreamResult(transformedXmlFile);
- Create
TransformerFactory and Transformer:
- TransformerFactory
transformerFactory = TransformerFactory.newInstance();
- Transformer
transformer = transformerFactory.newTransformer(xsltSource);
- Perform
the Transformation:
- transformer.transform(xmlSource,
result);
Running the Code
- Save
the XSLT File: Save the XSLT content to example.xsl.
- Save
the Source XML File: Save the source XML content to source.xml.
- Save
the Java Code: Save the Java code to XmlTransformer.java.
- Compile
the Java Code: Open a terminal and navigate to the directory
containing the Java file. Compile the code using:
sh
javac
XmlTransformer.java |
- Run
the Java Code: Execute the compiled class using:
sh
XmlTransformer.java |
Output
<?xml
version="1.0" encoding="UTF-8"?><!-- This is a
comment --><people> <place-where-person-live>
<name><nickName>Lars </nickName></name> <street> Test
</street> <telephon
number="0123"/> </place-where-person-live> <place-where-person-live>
<name><nickName>Joe </nickName></name> <street> Test2
</street> <telephon
number="1234"/> </place-where-person-live> <place-where-person-live>
<name><nickName>Jim</nickName></name> <street> Test3
</street> <telephon
number="2345"/> </place-where-person-live> </people> |
Notes
- Ensure
that source.xml and example.xsl are in the same directory as XmlTransformer.java
or provide the correct file paths.
- Adjust
the XSLT stylesheet according to the structure of your source and target
XML formats.
- You
can extend the XSLT stylesheet to handle more complex transformations as
needed.
By following these steps, you can transform an XML document
from one format to another using Java and XSLT.
0 Comments