We would like to know how to convert an XML file to CSV file.
import java.io.File; /*w w w . j a v a2s.c o m*/ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.w3c.dom.Document; public class Main { public static void main(String args[]) throws Exception { File stylesheet = new File("style.xsl"); File xmlSource = new File("data.xml"); DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(xmlSource); StreamSource stylesource = new StreamSource(stylesheet); Transformer transformer = TransformerFactory.newInstance() .newTransformer(stylesource); Source source = new DOMSource(document); Result outputTarget = new StreamResult(new File("/tmp/x.csv")); transformer.transform(source, outputTarget); } }
style.xsl
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" > <xsl:output method="text" omit-xml-declaration="yes" indent="no"/> <xsl:template match="/"> Host_Name,IP_address,OS,Load_avg_1min,Load_avg_5min,Load_avg_15min <xsl:for-each select="//Host"> <xsl:value-of select="concat(Host,',',IP,',',OS,',',Load,',',Load,'
')"/> </xsl:for-each> </xsl:template>// www . j a v a2 s .co m </xsl:stylesheet>
output:
Host_Name,IP_address,OS,Load_avg_1min,Load_avg_5min,Load_avg_15min srv001001,10.1.2.3,Windows1.3,2.5,1.2 srv001002,10.1.2.4,Linux1.4,2.5,1.2 srv001003,10.1.2.5,Linux3.3,1.6,1.8 srv001004,10.1.2.6,Linux2.3,4.5,4.2