xml+xsl生成html的方法
2008-06-21 13:08
579 查看
今天在论坛上看到一位朋友在利用xml+xsl生成html的时候,出现了乱码,在他代码的基础上做了下修改,解决了乱码问题。不知道是不是利用这种方法只能生成UTF-8的格式。
20080713追加
后来发现有include文件的情况,修改代码如下。
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); } }
<?xml version="1.0" encoding="GBK"?> <?xml-stylesheet Type="text/xsl" href="test.xsl"?> <syj> <test>测试</test> </syj>
<?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文件的情况,修改代码如下。
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(); }
相关文章推荐
- 将xml文件按照xsl文件样式快速生成html文件的方法
- XML+XSL输出HTML时,直接将XML输出为HTML的2种方法
- 格式化HTML的程序,可以生成XML或XSL
- 用JavaScript生成Android SDK的下载地址(3)——放弃xsl,纯JavaScript转换xml为html
- C#导出生成excel文件方法(xml,html方式)
- 用xsl样式转换xml,生成html
- 使用XML及XSL生成简单HTML
- xml和xsl生成html页面
- 使用XML及XSL生成简单HTML
- C#导出生成excel文件的方法小结(xml,html方式)
- python将xml xsl文件生成html文件存储示例讲解
- 利用xml+xsl快速生成大量JSP的常用代码的方法.
- 使用XML及XSL生成简单HTML
- 使用XML及XSL生成简单HTML
- 动态操作XML+XSL 生成HTML
- python将xml xsl文件生成html文件存储示例讲解
- ASP生成html的新方法
- XSL-FO 简单使用方法(java & xsl-fo & xml)
- 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
- java生成解析xml的另外两种方法JAXB