最近需要将xml的数据提取出来转化为xml,因此上网找资料搜索了一番,也学到了很多。现将学习时写的代码和文件发上来,记录记录,以备忘。
首先贴一下xml文件的代码。
<?xml version="1.0"?> <students> <student id="1001"> <name>张三</name> <score>85</score> <email>zhangsan@126.com</email> <age>20</age> <address> <province>广东</province> <city>广州</city> </address> </student> <student id="1002"> <name>李四</name> <score>79</score> <email>lisi@126.com</email> <age>24</age> <address> <province>广东</province> <city>深圳</city> </address> </student> <student id="1003"> <name>王五</name> <score>92</score> <email>wangwu@126.com</email> <age>24</age> <address> <province>广东</province> <city>汕头</city> </address> </student> </students>
接写来贴将xsl文件转化为html的java类。
package com.suntek.ivr.pushserver.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.jdom.transform.JDOMResult;
import org.jdom.transform.JDOMSource;
public class Xslt2html {
private Document outputDoc;
private String stylesheetPath;
private Document doc = null;
public Xslt2html() {
}
public void setoutputDoc(Document s) {
this.outputDoc = s;
}
public void setStylePath(String s) {
this.stylesheetPath = s;
}
public void startFilter() {
try {
TransformerFactory myFactory = TransformerFactory.newInstance();
Transformer myTransformer = myFactory.newTransformer(new StreamSource(stylesheetPath));
JDOMResult result = new JDOMResult();
JDOMSource source = new JDOMSource(outputDoc);
myTransformer.transform(source, result);
doc = result.getDocument();
} catch (Exception e) {
System.out.println("Error was:" + e.getMessage());
}
}
public void destroy() {
}
public Document getXmlDoc(){
return doc;
}
/**
* @param args
*/
public static void main(String[] args) throws Exception {
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File("d:/student.xml"));
Xslt2html xslt2html = new Xslt2html();
xslt2html.setoutputDoc(doc);
xslt2html.setStylePath("d:/student.xsl");
xslt2html.startFilter();
doc=xslt2html.getXmlDoc();
OutputStream out = null;
out = new FileOutputStream("d:/result.html");
//out = System.out;
XMLOutputter XMLOut = new XMLOutputter();
try {
XMLOut.output(doc, out);
} catch(Exception e) {
e.printStackTrace();
}
}
}
一个简单的xsl模版文件,生成html。
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/students"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>学生列表</title> </head> <body> <table border="1"> <tr> <th>姓名</th> <th>分数</th> <th>年龄</th> <th>邮箱</th> <th>省份城市</th> </tr> <tr> <th><xsl:value-of select="student/name"/></th> <th><xsl:value-of select="student/score"/></th> <th><xsl:value-of select="student/age"/></th> <th><xsl:value-of select="student/email"/></th> <th><xsl:value-of select="student/address/province"/><xsl:value-of select="student/address/city"/></th> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet>
这里转换得到的结果为:
姓名 | 分数 | 年龄 | 邮箱 | 省份城市 |
---|---|---|---|---|
张三 | 85 | 20 | zhangsan@126.com | 广东广州 |
<xsl:value-of>如果不是在<xsl:for-each>里面,它只会匹配并且输出第一个符合select要求的元素。因而这里输出的是张三。