这是一个有效的示例,
data.xml包含您的数据:
import java.io.File;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;class Xml2Csv { public static void main(String args[]) throws Exception { File stylesheet = new File("src/main/resources/style.xsl"); File xmlSource = new File("src/main/resources/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_Name,',',IP_address,',',OS,Load_avg_1min,',',Load_avg_5min,',',Load_avg_15min,'
')"/></xsl:for-each></xsl:template></xsl:stylesheet>
输出:
Host_Name,IP_address,OS,Load_avg_1min,Load_avg_5min,Load_avg_15minsrv001001,10.1.2.3,Windows1.3,2.5,1.2srv001002,10.1.2.4,Linux1.4,2.5,1.2srv001003,10.1.2.5,Linux3.3,1.6,1.8srv001004,10.1.2.6,Linux2.3,4.5,4.2



