Cyh的博客

Email:kissyan4916@163.com
posts - 26, comments - 19, trackbacks - 0, articles - 220

用XSLT转换XML

Posted on 2009-12-20 20:34 啥都写点 阅读(2064) 评论(0)  编辑  收藏 所属分类: J2SE
    XSL(eXtensible Stylesheet Language)是一种XML格式的文档,常用于定义文件的样式,比如可以用XSL定义一个HTML的样式。
    XSLT(XSL Transformations)是一种将XML文档按照XSL定义的样式进行转换的技术。比如XSLT可以按照XSL将XML文档转换成HTML文档。

      在Java中,通过JAXP(Java API for XML Processing)技术实现XSLT。
      TransformerFactory是XSLT引擎的工厂,它的newTransformer方法创建XSLT引擎Transformer,如果再创建时指定Source,则创建的XSLT引擎将按照Source进行转换。可以用XSL文件构造Source,那么使用了改Source的引擎将按照XSL文档定义的样式对XML文档进行转换。
      通过Transformer的getOutputProperties方法获得XSLT引擎的输出属性,OutputKeys.ENCODING属性表示输出的字符编码,OutputKeys.METHOD表示输出的文件格式,如html、text、xml等。
      Transformer的transform方法将Source转换成Result,其中Source为待转换的XML文件的Source,Result为目标文档的Result。


import java.io.File;
import java.util.Properties;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

/**
 * 使用JAXP根据XSL转换XML文档
 * JAXP是Java API for XML Processing的英文字头缩写,
 * 中文含义是:用于XML文档处理的使用Java语言编写的编程接口。
 * JAXP支持DOM、SAX、XSLT等标准。
 
*/

public class JAXPTransform {

    
/**
     * 使用XSLT将XML文档转换成HTML
     * 
@param xmlFileName    源XML文件名
     * 
@param xslFileName    XSL文件名
     * 
@param htmlFileName    输出的HTML文件名
     * 
@return    返回HTML文件名
     
*/

    
public static String xml_xslt_html(String xmlFileName, String xslFileName, 
            String htmlFileName)
throws Exception{
        
// 创建XSLT引擎的工厂
        TransformerFactory tFactory = TransformerFactory.newInstance();
        
// 创建XSLT引擎要使用的XSL文件源
        StreamSource source = new StreamSource(new File(xslFileName));
        
// 创建XSLT引擎
        Transformer tx = tFactory.newTransformer(source);
        
        
// 设置XSLT引擎的输出属性,使之输出为HTML格式,并且支持中文。
        Properties properties = tx.getOutputProperties(); 
        properties.setProperty(OutputKeys.ENCODING,
"GB2312");
        properties.setProperty(OutputKeys.METHOD, 
"html");
        tx.setOutputProperties(properties); 
        
        
// 创建XML文件源和HTML文件的结果流
        StreamSource xmlSource = new StreamSource(new File(xmlFileName));
        File targetFile 
= new  File(htmlFileName);
        StreamResult result 
= new StreamResult(targetFile);
        
        
// 实现XSLT转换,根据XSL文件源将XML文件源转换成HTML结果流
        tx.transform(xmlSource,    result);
        
        
return targetFile.getAbsolutePath();
    }

    
    
public static void main(String[] args) throws Exception {
        
        String xmlFileName 
= "students.xml";
        String xslFileName 
= "students.xsl";
        String targetFileName 
= "students.html";
        
        JAXPTransform.xml_xslt_html(xmlFileName, xslFileName, targetFileName);
    }

}

   students.xsl定义了目标HTML的样式,将XML文档的相关属性用HTML显示出来,具体内容如下:

<?xml version="1.0"  encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<head><title>学生信息</title></head>
<body>
    <table border="1">
    <tr>
        <th>姓名</th>
        <th>年龄</th>
        <th>电话</th>
    </tr>

    <xsl:for-each select="学生花名册/学生">
        <tr>
            <td><xsl:value-of select="姓名"/></td>
            <td><xsl:value-of select="年龄"/></td>
            <td><xsl:value-of select="电话"/></td>
        </tr>
    </xsl:for-each>
    </table>

</body></html>
</xsl:template>
</xsl:stylesheet>








































                                                                                                       --    学海无涯