`
xinlingwuyu
  • 浏览: 138718 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

xml+xsl生成html的方法

阅读更多

今天在论坛上看到一位朋友在利用xml+xsl生成html的时候,出现了乱码,在他代码的基础上做了下修改,解决了乱码问题。不知道是不是利用这种方法只能生成UTF-8的格式。

 

view plaincopy to clipboardprint?
import java.io.BufferedReader;  
 
import java.io.ByteArrayInputStream;  
 
import java.io.ByteArrayOutputStream;  
 
import java.io.File;  
 
import java.io.FileReader;  
 
import java.io.IOException;  
 
 
 
import javax.xml.parsers.DocumentBuilder;  
 
import javax.xml.parsers.DocumentBuilderFactory;  
 
import javax.xml.transform.Source;  
 
import javax.xml.transform.Templates;  
 
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;  
 
 
 
/** 
 
 * <p> 
 
 * Title:将xml+xsl生成html 
 
 * </p> 
 
 *  
 
 * <p> 
 
 * Copyright: 转载请注明出处http://blog.csdn.net/sunyujia/ 
 
 * </p> 
 
 *  
 
 * @author 孙钰佳 
 
 * @main sunyujia@yahoo.cn 
 
 * @date Jun 21, 2008 12:40:38 PM 
 
 */ 
 
public class Test {  
 
    public static String buildHtml(String xml, String xsl) throws Exception {  
 
        DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory  
 
                .newInstance();  
 
        DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();  
 
        Document xmlDoc = builder  
 
                .parse(new ByteArrayInputStream(xml.getBytes()));  
 
        Source xmlSource = new DOMSource(xmlDoc);  
 
        StreamSource xslSource = new StreamSource(new ByteArrayInputStream(xsl  
 
                .getBytes()));  
 
        TransformerFactory tf = TransformerFactory.newInstance();  
 
        Templates transformation = tf.newTemplates(xslSource);  
 
        Transformer transformer = transformation.newTransformer();  
 
 
 
        ByteArrayOutputStream bos = new ByteArrayOutputStream();  
 
        StreamResult result = new StreamResult(bos);  
 
        transformer.transform(xmlSource, result);  
 
        return new String(bos.toByteArray(), "UTF-8");// 指定UTF-8解决乱码问题  
                     //如果这里不指定UTF-8的话需指定xsl为GBK方式输出  
                  //<xsl:output method="html" encoding="GBK" indent="yes"/>   
                  //<xsl:template match="/">  
    }  
 
 
 
    public static String readFileToString(File file) throws IOException {  
 
        StringBuffer sb = null;  
 
        BufferedReader in = null;  
 
        try {  
 
            in = new BufferedReader(new FileReader(file));  
 
            sb = new StringBuffer();  
 
            for (String line; (line = in.readLine()) != null;) {  
 
                sb.append(line + "\r\n");  
 
            }  
 
        } finally {  
 
            if (in != null)  
 
                in.close();  
 
        }  
 
        return sb.toString();  
 
    }  
 
 
 
    public static void main(String[] args) throws Exception {  
 
        String xmlStr = readFileToString(new File(Test.class.getResource(  
 
                "test.xml").getFile()));  
 
        String xslStr = readFileToString(new File(Test.class.getResource(  
 
                "test.xsl").getFile()));  
 
        String html = buildHtml(xmlStr, xslStr);  
 
        System.out.println(html);  
 
    }  
 
 
 

import java.io.BufferedReader;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileReader;

import java.io.IOException;

 

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.transform.Source;

import javax.xml.transform.Templates;

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;

 

/**

 * <p>

 * Title:将xml+xsl生成html

 * </p>

 *

 * <p>

 * Copyright: 转载请注明出处http://blog.csdn.net/sunyujia/

 * </p>

 *

 * @author 孙钰佳

 * @main sunyujia@yahoo.cn

 * @date Jun 21, 2008 12:40:38 PM

 */

public class Test {

 public static String buildHtml(String xml, String xsl) throws Exception {

  DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory

    .newInstance();

  DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();

  Document xmlDoc = builder

    .parse(new ByteArrayInputStream(xml.getBytes()));

  Source xmlSource = new DOMSource(xmlDoc);

  StreamSource xslSource = new StreamSource(new ByteArrayInputStream(xsl

    .getBytes()));

  TransformerFactory tf = TransformerFactory.newInstance();

  Templates transformation = tf.newTemplates(xslSource);

  Transformer transformer = transformation.newTransformer();

 

  ByteArrayOutputStream bos = new ByteArrayOutputStream();

  StreamResult result = new StreamResult(bos);

  transformer.transform(xmlSource, result);

  return new String(bos.toByteArray(), "UTF-8");// 指定UTF-8解决乱码问题
                     //如果这里不指定UTF-8的话需指定xsl为GBK方式输出
                  //<xsl:output method="html" encoding="GBK" indent="yes"/>
                  //<xsl:template match="/">
 }

 

 public static String readFileToString(File file) throws IOException {

  StringBuffer sb = null;

  BufferedReader in = null;

  try {

   in = new BufferedReader(new FileReader(file));

   sb = new StringBuffer();

   for (String line; (line = in.readLine()) != null;) {

    sb.append(line + "\r\n");

   }

  } finally {

   if (in != null)

    in.close();

  }

  return sb.toString();

 }

 

 public static void main(String[] args) throws Exception {

  String xmlStr = readFileToString(new File(Test.class.getResource(

    "test.xml").getFile()));

  String xslStr = readFileToString(new File(Test.class.getResource(

    "test.xsl").getFile()));

  String html = buildHtml(xmlStr, xslStr);

  System.out.println(html);

 }

 

}
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="GBK"?> 
 
<?xml-stylesheet Type="text/xsl" href="test.xsl"?>   
 
<syj> 
 
    <test>测试</test> 
 
</syj> 

<?xml version="1.0" encoding="GBK"?>

<?xml-stylesheet Type="text/xsl" href="test.xsl"?>

<syj>

 <test>测试</test>

</syj>
view plaincopy to clipboardprint?
<?xml version="1.0" encoding="GBK"?> 
 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
 
<xsl:template match="/"> 
 
<html> 
 
<head> 
 
</head> 
 
<body> 
 
<xsl:value-of select="syj/test"/> 
 
</body> 
 
</html> 
 
</xsl:template> 
 
</xsl:stylesheet> 

<?xml version="1.0" encoding="GBK"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/">

<html>

<head>

</head>

<body>

<xsl:value-of select="syj/test"/>

</body>

</html>

</xsl:template>

</xsl:stylesheet>  20080713追加

后来发现有include文件的情况,修改代码如下。

view plaincopy to clipboardprint?
public static String buildHtml(String xml, String xsl, final String basePath)  
 
        throws Exception {  
 
 
 
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory  
 
 
 
    .newInstance();  
 
 
 
    DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();  
 
 
 
    Document xmlDoc = builder.parse(new InputSource(new StringReader(xml)));  
 
 
 
    Source xmlSource = new DOMSource(xmlDoc);  
 
 
 
    StreamSource xslSource = new StreamSource(new StringReader(xsl));  
 
 
 
    TransformerFactory tf = TransformerFactory.newInstance();  
 
    URIResolver uriReslover = new URIResolver() {  
 
        public Source resolve(String href, String base)  
 
                throws TransformerException {  
 
            try {  
 
                //当遇到include文件的时候会执行此方法  
 
                // return new StreamSource(new StringReader(  
 
                // readFileToString(new URL(fileName))));  
 
                return null;  
 
            } catch (IOException e) {  
 
                e.printStackTrace();  
 
            }  
 
            return null;  
 
        }  
 
    };  
 
    tf.setURIResolver(uriReslover);  
 
    Templates transformation = tf.newTemplates(xslSource);  
 
 
 
    Transformer transformer = transformation.newTransformer();  
 
 
 
    StringWriter sw = new StringWriter();  
 
    StreamResult result = new StreamResult(sw);  
 
 
 
    transformer.transform(xmlSource, result);  
 
 
 
    return sw.toString();  
 
}
原文网址:http://blog.csdn.net/sunyujia/archive/2008/06/21/2572479.aspx

分享到:
评论

相关推荐

    xml+xsl+css生成制作html网页

    xml+xsl+css html网页 xml+xsl+css html网页 xml+xsl+css html网页 xml+xsl+css html网页 xml+xsl+css html网页 xml+xsl+css html网页

    xml+xsl+css+dtd书写的个人网页

    在这个个人网页项目中,XSLT可能被用来根据XML数据生成不同的页面视图,使页面布局和设计符合预期。 CSS(Cascading Style Sheets)是用于控制网页元素样式和布局的样式表语言。在XML+XSL的项目中,CSS用于美化由...

    xml+css+xsl个人简历

    4. 使用XSLT处理器应用XSL转换:这一步将XML和XSL结合,生成最终的HTML文件,可以在浏览器中查看。 5. 部署和测试:在不同设备和浏览器上测试简历的显示效果,确保兼容性和用户体验。 这个项目对于学习XML、CSS和...

    XML+XSL/FO生成PDF文件Demo

    总之,XML+XSL/FO+FOP技术栈提供了一种强大的方法,将结构化的XML数据转换为专业品质的PDF文档,适合于各种业务场景,如自动化报表生成、电子出版物制作等。熟悉这一流程对于IT从业者,尤其是从事数据处理、文档管理...

    WEB图形格式SVG及基于XML+XSL的动态生成技术

    ### WEB图形格式SVG及基于XML+XSL的动态生成技术 #### SVG:开启网络图形新时代 SVG(可伸缩矢量图形)作为一种新兴的网络图形格式,正逐步改变着网络图像的呈现方式。与传统的位图格式(如JPEG、GIF)相比,SVG...

    XML+xsl讲XML文档的内容用xsl建表

    5. **应用转换**:最后,使用支持XSLT的工具或编程语言(如Java、Python等)将XML文档和XSLT模板结合,执行转换生成HTML或其他格式的输出。 通过这样的过程,我们可以将复杂、结构化的XML数据转化为易于理解和操作...

    使用JavaScript+XML+XSL创建树形目录

    在HTML页面中,我们可以使用JavaScript来加载XML和XSL文件,然后应用XSL转换得到HTML,最后使用DOM操作来实现树形目录的交互功能。以下是一个简单的JavaScript示例: ```javascript function loadTree() { var xhr...

    xml和xsl生成html页面

    在实际应用中,我们可以使用XML解析器(如Java的DOM或SAX解析器)读取XML文档,然后结合XSLT处理器(如Saxon或Xalan)和XSL样式表进行转换,生成HTML页面供浏览器展示。例如,`test.xml`可能是包含结构化数据的XML...

    xml+xsl

    在浏览器中,当一个XML文档与相应的XSL样式表一起加载时,浏览器会根据XSLT规则解析XML,并生成新的HTML,从而实现动态的、富于表现力的页面效果。 **源码与工具** 在标签中提到的“源码”可能指的是XML和XSLT的源...

    简单的xml与xsl实例

    XML是一种标记语言,用于结构化地描述数据,而XSL则用于转换XML文档的结构,以生成不同格式的输出,如HTML、PDF或纯文本。 XML的基本概念: 1. **结构化数据**:XML通过自定义的标签来描述数据的结构和内容,允许...

    xml xsl网页生成

    - **输出方法**:XSLT支持多种输出方法,如HTML、XML或文本,通过`&lt;xsl:output&gt;`元素设置。 4. 示例代码: - 一个简单的XML文档可能如下所示: ```xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;author&gt;...

    javaxml,xsl,html文件转换.pdf

    Java XML、XSL 和 HTML 文件转换技术详解 本文档主要讲解了 Java 中的 XML、XSL 和 HTML 文件转换技术。通过对 Java 代码的分析,我们可以了解到如何将 XML 文件转换为 HTML 文件,并了解到 XSL 模板的应用。 首先...

    javaxml,xsl,html文件转换[定义].pdf

    Java XML、XSL、HTML 文件转换...Java XML、XSL、HTML 文件转换技术是软件开发中的一种常见技术,广泛应用于数据交换、文档生成等领域。了解该技术可以帮助开发人员更好地处理 XML 和 XSL 文件,提高开发效率和质量。

    用XML和XSL来生成动态页面

    总的来说,XML和XSL的组合提供了一种强大且灵活的方法,用于生成动态网页和处理结构化数据。它们不仅在企业级应用中发挥着重要作用,也在Web服务、数据集成和跨平台通信等领域有着广泛应用。理解XML的标准化和XSL的...

    利用xml和xsl自动生成菜单

    通过XSL,我们可以定义XML数据如何被呈现出来,例如生成HTML菜单。下面是一个简单的XSL示例,将上面的XML转换为HTML菜单: ```xml &lt;xsl:stylesheet version="1.0" xmlns:xsl=...

    XML转换XSL工具

    另一方面,XSL(Extensible Stylesheet Language)是用来转换XML文档的样式表语言,尤其是XSLT(XSL Transformations),它是XSL的一部分,专门用于将XML数据转换成其他格式,如HTML、PDF或简单的文本。 XML转换XSL...

    一个利用xml和xsl解释生成无限级的树形菜单的源程序

    总结起来,这个"treemenu"项目展示了XML和XSL的强大结合,通过XML结构化存储菜单数据,XSLT动态生成HTML结构,实现了一个灵活且易于维护的无限级树形菜单系统。对于任何需要构建复杂导航系统的开发者来说,这都是一...

    QTP:XML联合XSL输出html报表

    - **加载XML和XSL文件**:使用`CreateObject`创建DOM对象,并加载XML和XSL文件。 - **应用XSLT转换**:调用`transformNode`方法应用XSLT转换。 - **输出HTML文件**:将转换后的HTML文本写入指定的文件中。 #### ...

    xml与xsl的小实例

    通过XSLT,1.xsl会根据其规则对1.xml进行解析,生成一个新的结构或样式,这可能是用于网页展示的HTML。 XSLT的工作原理是通过模板匹配。模板定义了当遇到特定的XML元素时如何处理。例如,如果我们有如下的XML元素:...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    6.6.4 sendredirect()和forward()方法的区别 238 6.7 小结 239 第7章 web应用程序的部署 240 7.1 配置任意目录下的web应用程序 240 7.2 war文件 242 7.3 tomcat中servlet的另一种运行方式 244 7.4 与servlet...

Global site tag (gtag.js) - Google Analytics