`
Java_Fan
  • 浏览: 79564 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

java中通过xsl将xml数据装换为html格式字符串

 
阅读更多

直接给代码:

package com.adam.xedit.service.server.xml;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.StringWriter;

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

import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;
import org.dom4j.io.HTMLWriter;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;

/**
 * 通过xsl文件转换相应的xml数据文件为html格式字符串
 * @author hsy
 *
 */
public class Xml2HtmlString
{
    private Logger log = Logger.getLogger(this.getClass().getName());
    
    public Xml2HtmlString()
    {
        super();
    }
    
    /**
     * 将xml以xsl样式转化为html字符串 
     * @param xmlString xml字符串
     * @param xslPath xsl路径
     * @return
     */
    public String getHtmlString(String xmlString,String xslPath){
        log.info("开始执行getHtmlString(...)方法");
        String returnDocStr = "";
        try {
            SAXReader reader = new SAXReader();
            ByteArrayInputStream bais = new ByteArrayInputStream(xmlString.getBytes());
            Document doc = reader.read(bais);
            Document transformDoc = this.transformDocument(doc,xslPath);
            returnDocStr = this.write2String(transformDoc);
            log.info("getHtmlString(...)执行成功!");
        } catch (Exception e) {
            log.info("getHtmlString(...)方法执行失败,提示信息["+e.getMessage()+"]");
        }
        return returnDocStr;
    }
    
    /**
     * 通过xsl将xml数据文件转化doc对象
     * @param doc xml文档对象
     * @param xslPath xls文件路径
     * @return
     */
    private Document transformDocument(Document doc,String xslPath){
        log.info("开始执行 transformDocument(...)方法");
        TransformerFactory factory = TransformerFactory.newInstance();
        Document transformerDoc = null;
        try {
            Transformer transformer = factory.newTransformer(new StreamSource(xslPath));
            DocumentSource docSource = new DocumentSource(doc);
            DocumentResult docResult = new DocumentResult();
            transformer.transform(docSource, docResult);
            transformerDoc = docResult.getDocument();
            log.info("transformDocument(...)执行成功!");
        } catch (Exception e) {
            log.info("transformDocument(...)方法执行失败,提示信息["+e.getMessage()+"]");
        }
        return transformerDoc;
    }
    
    /**
     * 将doc文档对象转化为html字符串
     * @param transformDoc doc文档
     * @return
     */
    private String write2String(Document transformDoc){
        log.info("开始执行 write2String(...)方法");
        StringWriter strWriter = new StringWriter();
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("GBK");
        format.setXHTML(true);
        HTMLWriter htmlWriter = new HTMLWriter(strWriter,format);
        format.setExpandEmptyElements(false);
        try {
            htmlWriter.write(transformDoc);
            htmlWriter.flush();
            log.info("write2String(...)执行成功!");
        } catch (IOException e) {
            log.info("write2String(...)方法执行失败,提示信息["+e.getMessage()+"]");
        }
        return strWriter.toString();
    }
    
    public static void main(String[] args){
        Xml2HtmlString obj = new Xml2HtmlString();
        String xmlString = "<?xml version=\"1.0\" encoding=\"GBK\"?>" +
                "<?xml-stylesheet type=\"text/xsl\" href=\"xedit/xsl/CUSTOMER_Query.xsl\"?>" +
                "<rows tableName=\"HSY_T_CUSTOMER\" token=\"80C3ED58-28DB-264F-5E3C-0CB174373E6C\" pageType=\"query-page\" pageNo=\"1\" pageSize=\"20\" recordsCount=\"9\" pagesCount=\"1\" title=\"大客户查询\" workflow=\"false\" xsl=\"xedit/xsl/CUSTOMER_Query.xsl\" print-template=\"xedit/xsl/CUSTOMER_Query.xsl\" >" +
                    "<queryRow>" +
                        "<START_DATE align=\"right\" operator=\"ge\" fieldTitle=\"创建时间\" dataType=\"dateTime\" >2013-02-19 15:44:50.0</START_DATE>" +
                        "<STOP_DATE align=\"right\" operator=\"le\" fieldTitle=\"停用时间\" dataType=\"dateTime\" >2030-02-19 15:44:52.0</STOP_DATE>" +
                        "<CUSTOMER_NAME align=\"right\" operator=\"eq\" fieldTitle=\"大用户名称\" dataType=\"string\" >时代复分</CUSTOMER_NAME>" +
                    "</queryRow>" +
                    "<row>" +
                        "<CUSTOMER_ID align=\"right\" fieldTitle=\"大用户ID\" dataType=\"NUMBER\" pk=\"true\" hidden=\"false\">2</CUSTOMER_ID>" +
                        "<CUSTOMER_NAME align=\"left\" fieldTitle=\"大用户名称\" dataType=\"VARCHAR2\" pk=\"false\" hidden=\"false\">时代复分</CUSTOMER_NAME>" +
                        "<START_DATE align=\"center\" fieldTitle=\"创建时间\" dataType=\"DATE\" pk=\"false\" hidden=\"false\">2013-02-19 15:44:50.0</START_DATE>" +
                        "<STOP_DATE align=\"center\" fieldTitle=\"停用时间\" dataType=\"DATE\" pk=\"false\" hidden=\"false\">2030-02-19 15:44:52.0</STOP_DATE>" +
                        "<X align=\"left\" fieldTitle=\"X坐标\" dataType=\"VARCHAR2\" pk=\"false\" hidden=\"false\">456312</X>" +
                        "<Y align=\"left\" fieldTitle=\"Y坐标\" dataType=\"VARCHAR2\" pk=\"false\" hidden=\"false\">456789</Y>" +
                    "</row>" +
               "</rows>";
        String projectPath = Thread.currentThread().getContextClassLoader().getResource("").getPath();// /X:/dev_env/server/tomcat-5.0.28/webapps/adam.workflow.frame/WEB-INF/classes/
        projectPath = projectPath.substring(0, projectPath.lastIndexOf("/"));
        projectPath = projectPath.substring(0, projectPath.lastIndexOf("/"));
        projectPath = projectPath.substring(0, projectPath.lastIndexOf("/") + 1);// WebRoot根路径
        String xlsPath = projectPath+"xedit/xsl/CUSTOMER_Query.xsl";
        String str = obj.getHtmlString(xmlString, xlsPath);
        System.out.println("str=="+str);
    } 
    
}

控制台输出结果:

str==
<html xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <head>
    <link href="css/public.css" type="text/css" rel="stylesheet" />
<script src="js/My97DatePicker/WdatePicker.js" type="text/javascript"/>
  </head>
  <body>
    <table id="xlsQueryTable" width="100%" style="width:800;">
      <tr>
        <td align="right">创建时间[ 大于等于]</td>
        <td>
          <input align="right" type="text" id="START_DATE" name="START_DATE" value="" onfocus="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" class="Wdate" style="operator:ge;dataType:dateTime;" />
        </td>
        <td align="right">停用时间[ 小于等于]</td>
        <td>
          <input align="right" type="text" id="STOP_DATE" name="STOP_DATE" value="" onfocus="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" class="Wdate" style="operator:le;dataType:dateTime;" />
        </td>
      </tr>
      <tr>
        <td align="right">大用户名称</td>
        <td>
          <input align="right" type="text" id="CUSTOMER_NAME" name="CUSTOMER_NAME" value="" style="operator:eq;dataType:string;" />
        </td>
      </tr>
    </table>
  </body>
</html>


CUSTOMER_Query.xsl文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
	<xsl:template match="/">
		<html>
			<head>
				<link rel="stylesheet" type="text/css" href="css/public.css"></link>
				<script type="text/javascript" src="js/My97DatePicker/WdatePicker.js"></script>
			</head>
			<body>
				<table style="width:800;" width="100%" id="xlsQueryTable">
					<!--
					 每一个字段显示两列:字段名称、字段值输入框;
					 1.生成字段名称时:	对于xml中的operator属于 > 、 >= 、< 、<= 等要在页面显示相应的文字;
					 2.生成字段输入框时:对于xml中的属性也要生成页面元素,包括[align、type、id、name];
										判断数据类型以确定其在页面中显示的输入库的样式;
					 -->
					<tr>
						<!-- 字段 START_DATE -->
						<td>
							<xsl:attribute name="align"><xsl:value-of select="rows/queryRow/START_DATE/attribute::align"/></xsl:attribute>
							<xsl:value-of select="rows/queryRow/START_DATE/attribute::fieldTitle"></xsl:value-of>
							<xsl:choose>
								<xsl:when test="rows/queryRow/START_DATE/@operator='ge'">[  大于等于]</xsl:when>
								<xsl:when test="rows/queryRow/START_DATE/@operator='gt'">[  大于]</xsl:when>
								<xsl:when test="rows/queryRow/START_DATE/@operator='le'">[  小于等于]</xsl:when>
								<xsl:when test="rows/queryRow/START_DATE/@operator='lt'">[  小于]</xsl:when>
								<xsl:otherwise></xsl:otherwise>
							</xsl:choose>
						</td>
						<td>
							<xsl:element name="input">
								<xsl:attribute name="align">
									<xsl:value-of select="rows/queryRow/START_DATE/attribute::align"></xsl:value-of>
								</xsl:attribute>
								<xsl:attribute name="type">text</xsl:attribute>
								<xsl:attribute name="id">START_DATE</xsl:attribute>
								<xsl:attribute name="name">START_DATE</xsl:attribute>
								<xsl:attribute name="value"></xsl:attribute>
								<!-- 判断输入框格式 -->
								<xsl:choose>
									<xsl:when test="rows/queryRow/START_DATE/@dataType='date'">
										<xsl:attribute name="onfocus">WdatePicker({dateFmt:'yyyy-MM-dd'})</xsl:attribute>
										<xsl:attribute name="class">Wdate</xsl:attribute>
									</xsl:when>
									<xsl:when test="rows/queryRow/START_DATE/@dataType='dateTime'">
										<xsl:attribute name="onfocus">WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})</xsl:attribute>
										<xsl:attribute name="class">Wdate</xsl:attribute>
									</xsl:when>
									<xsl:when test="rows/queryRow/START_DATE/@dataType='time'">
										<xsl:attribute name="onfocus">WdatePicker({dateFmt:'HH:mm:ss'})</xsl:attribute>
										<xsl:attribute name="class">Wdate</xsl:attribute>
									</xsl:when>
									<xsl:otherwise></xsl:otherwise>
								</xsl:choose>
								<xsl:attribute name="style">operator:<xsl:value-of select="rows/queryRow/START_DATE/attribute::operator"></xsl:value-of>;dataType:<xsl:value-of select="rows/queryRow/START_DATE/attribute::dataType"></xsl:value-of>;</xsl:attribute>
							</xsl:element>
						</td>
						
						
						<!-- 字段 STOP_DATE -->
						<td>
							<xsl:attribute name="align"><xsl:value-of select="rows/queryRow/STOP_DATE/attribute::align"/></xsl:attribute>
							<xsl:value-of select="rows/queryRow/STOP_DATE/attribute::fieldTitle"></xsl:value-of>
							<xsl:choose>
								<xsl:when test="rows/queryRow/STOP_DATE/@operator='ge'">[  大于等于]</xsl:when>
								<xsl:when test="rows/queryRow/STOP_DATE/@operator='gh'">[  大于]</xsl:when>
								<xsl:when test="rows/queryRow/STOP_DATE/@operator='le'">[  小于等于]</xsl:when>
								<xsl:when test="rows/queryRow/STOP_DATE/@operator='lh'">[  小于]</xsl:when>
								<xsl:otherwise></xsl:otherwise>
							</xsl:choose>
						</td>
						<td>
							<xsl:element name="input">
								<xsl:attribute name="align">
									<xsl:value-of select="rows/queryRow/STOP_DATE/attribute::align"></xsl:value-of>
								</xsl:attribute>
								<xsl:attribute name="type">text</xsl:attribute>
								<xsl:attribute name="id">STOP_DATE</xsl:attribute>
								<xsl:attribute name="name">STOP_DATE</xsl:attribute>
								<xsl:attribute name="value"></xsl:attribute>
								<!-- 判断输入框格式 -->
								<xsl:choose>
									<xsl:when test="rows/queryRow/STOP_DATE/@dataType='date'">
										<xsl:attribute name="onfocus">WdatePicker({dateFmt:'yyyy-MM-dd'})</xsl:attribute>
										<xsl:attribute name="class">Wdate</xsl:attribute>
									</xsl:when>
									<xsl:when test="rows/queryRow/STOP_DATE/@dataType='dateTime'">
										<xsl:attribute name="onfocus">WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})</xsl:attribute>
										<xsl:attribute name="class">Wdate</xsl:attribute>
									</xsl:when>
									<xsl:when test="rows/queryRow/STOP_DATE/@dataType='time'">
										<xsl:attribute name="onfocus">WdatePicker({dateFmt:'HH:mm:ss'})</xsl:attribute>
										<xsl:attribute name="class">Wdate</xsl:attribute>
									</xsl:when>
									<xsl:otherwise></xsl:otherwise>
								</xsl:choose>
								<xsl:attribute name="style">operator:<xsl:value-of select="rows/queryRow/STOP_DATE/attribute::operator"></xsl:value-of>;dataType:<xsl:value-of select="rows/queryRow/STOP_DATE/attribute::dataType"></xsl:value-of>;</xsl:attribute>
							</xsl:element>
						</td>
					</tr>
					
					
					<!-- 字段 CUSTOMER_NAME -->
					<tr>
						<td>
							<xsl:attribute name="align"><xsl:value-of select="rows/queryRow/CUSTOMER_NAME/attribute::align"/></xsl:attribute>
							<xsl:value-of select="rows/queryRow/CUSTOMER_NAME/attribute::fieldTitle"></xsl:value-of>
							<xsl:choose>
								<xsl:when test="rows/queryRow/CUSTOMER_NAME/@operator='ge'">[  大于等于]</xsl:when>
								<xsl:when test="rows/queryRow/CUSTOMER_NAME/@operator='gh'">[  大于]</xsl:when>
								<xsl:when test="rows/queryRow/CUSTOMER_NAME/@operator='le'">[  小于等于]</xsl:when>
								<xsl:when test="rows/queryRow/CUSTOMER_NAME/@operator='lh'">[  小于]</xsl:when>
								<xsl:otherwise></xsl:otherwise>
							</xsl:choose>
						</td>
						<td>
							<xsl:element name="input">
								<xsl:attribute name="align">
									<xsl:value-of select="rows/queryRow/CUSTOMER_NAME/attribute::align"></xsl:value-of>
								</xsl:attribute>
								<xsl:attribute name="type">text</xsl:attribute>
								<xsl:attribute name="id">CUSTOMER_NAME</xsl:attribute>
								<xsl:attribute name="name">CUSTOMER_NAME</xsl:attribute>
								<xsl:attribute name="value"></xsl:attribute>
								<!-- 判断输入框格式 -->
								<xsl:choose>
									<xsl:when test="rows/queryRow/CUSTOMER_NAME/@dataType='date'">
										<xsl:attribute name="onfocus">WdatePicker({dateFmt:'yyyy-MM-dd'})</xsl:attribute>
										<xsl:attribute name="class">Wdate</xsl:attribute>
									</xsl:when>
									<xsl:when test="rows/queryRow/CUSTOMER_NAME/@dataType='dateTime'">
										<xsl:attribute name="onfocus">WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})</xsl:attribute>
										<xsl:attribute name="class">Wdate</xsl:attribute>
									</xsl:when>
									<xsl:when test="rows/queryRow/CUSTOMER_NAME/@dataType='time'">
										<xsl:attribute name="onfocus">WdatePicker({dateFmt:'HH:mm:ss'})</xsl:attribute>
										<xsl:attribute name="class">Wdate</xsl:attribute>
									</xsl:when>
									<xsl:otherwise></xsl:otherwise>
								</xsl:choose>
								<xsl:attribute name="style">operator:<xsl:value-of select="rows/queryRow/CUSTOMER_NAME/attribute::operator"></xsl:value-of>;dataType:<xsl:value-of select="rows/queryRow/CUSTOMER_NAME/attribute::dataType"></xsl:value-of>;</xsl:attribute>
							</xsl:element>
						</td>
					</tr>
				</table>
			</body>
		</html>
	</xsl:template>
</xsl:stylesheet>

取table元素后显示在页面中样式:



分享到:
评论

相关推荐

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

    例如,parseXmlResource 方法用于解析 XML 文件,returnXml 方法用于将 XML 文件转换为字符串。 ```java public String parseXmlResource(String xmlFileName, String encoding) throws Exception { // 实现从 XML...

    javaxml,xsl,html文件转换.pdf

    通过对 Java 代码的分析,我们可以了解到如何将 XML 文件转换为 HTML 文件,并了解到 XSL 模板的应用。 首先,让我们了解什么是 XML、XSL 和 HTML。XML(Extensible Markup Language)是一种标记语言,用于存储和...

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

    例如,你可以使用XSLT将XML中的每个元素转换为HTML表格的行或列。 XPath是XML的数据定位语言,它允许我们通过路径表达式来选取XML文档中的节点。XPath提供了丰富的函数库,可以对选取的节点进行计算、比较和字符串...

    xsl与xml转化的实例

    XML(可扩展标记语言)和XSL(可扩展样式表语言)是Web开发中的核心技术,它们主要用于数据的存储和格式化展示。XML是一种结构化数据的标记语言,它允许我们以自定义的方式组织和标记数据,使其易于机器理解和处理。...

    XML与CSS、XML与XSL及在页面中直接调用XML的数据

    例如,我们可以为上述XML中的`book`元素定义样式: ```css book { font-family: Arial, sans-serif; color: #333; } author { font-weight: bold; } ``` 这样,`book`元素内的文本将以Arial字体和深灰色...

    XSL转换XML为HTML树显示

    在本案例中,我们讨论的主题是“XSL转换XML为HTML树显示”,这涉及到将XML数据以可交互的树状结构在网页上展示。 XSL转换的工作原理是通过XSL样式表(XSLT,XSL Transformations)来定义XML文档如何被转换。XSLT是...

    javaxml,xsl,html文件转换借鉴.pdf

    在Java编程中,XML(Extensible Markup Language)、XSL(eXtensible Stylesheet Language)和HTML(Hypertext Markup Language)是三种常见的数据格式,它们各自有特定的应用场景。XML用于结构化数据存储,XSL用于...

    ASP.NET通过xsl把xml转化为xhtml

    在这个“ASP.NET通过xsl把xml转化为xhtml”的示例中,我们将探讨如何利用ASP.NET的XslTransform类或者XslCompiledTransform类实现这一过程。这两个类都是.NET Framework提供的,用于执行XSLT(XSL Transformation)...

    如何在Java中将XML文档转换成HTML文档.pdf

    在实际应用中,常常需要将XML中的数据转换为HTML格式,以便于在网页上直观地展示数据。 ##### Java中XML转HTML技术概述 在Java环境中,实现XML文档向HTML文档转换的技术主要依赖于XSLT(Extensible Stylesheet ...

    XSLT将XML装换为XHTML(带源码)

    而XSLT(eXtensible Stylesheet Language Transformations)是专门用来转换XML文档的语言,它允许我们将XML数据转化为其他格式,如HTML、XHTML或者PDF等。在本教程中,我们将详细探讨如何使用XSLT将XML转换为XHTML,...

    xml+xsl中分割字符

    在XML与XSL技术的结合应用中,对字符串进行分割处理是一项常见的需求,尤其是在需要将一个包含多个值的属性或元素拆分为多个单独元素时。本文将深入探讨如何利用XSLT中的`substring-before()`和`substring-after()`...

    xml和xsl生成html页面

    在这个XSL样式表中,我们定义了一个模板,匹配XML文档的根元素,并使用`xsl:value-of`选择器提取XML中的数据,将其嵌入到HTML结构中。 在实际应用中,我们可以使用XML解析器(如Java的DOM或SAX解析器)读取XML文档...

    纯html标签静态调用xml文件及xsl对xml文件的的显示修饰

    XSLT(XSL Transformations)是XSL的一部分,它定义了转换规则,将XML数据转化为HTML或其他格式。以下是一个简单的XSL样式表(Rss.xsl)示例: ```xml &lt;xsl:stylesheet version="1.0" xmlns:xsl=...

    java 调用 xsl一些案例

    Java调用XSL(XSL Transformations)是将XML数据转换为其他格式,如HTML、PDF或纯文本的常见技术。XSL是一种样式表语言,用于描述如何将XML文档呈现出来。在Java中,我们可以使用Java API for XML Processing (JAXP)...

    Xsl与xml结合Xsl与xml结合

    XSL(Extensible Stylesheet Language)则是用来转换XML文档的样式语言,它能够将XML数据转化为不同的格式,如HTML、PDF或者其他的XML文档。 XSL由三部分组成:XSLT(XSL Transformations)、XPath(XML Path ...

    xml根据xsl转换

    这个程序会将名为"input.xml"的XML文件按照"style.xsl"中的样式规则转换,并将结果保存到"output.xml"。实际应用中,你可能需要根据实际情况调整输入文件路径和输出文件路径。 总结来说,XML和XSLT是处理结构化数据...

    xsl转xml成html,很实用的源码

    这种转换方法在数据展示、报表生成等方面非常有用,因为它允许开发者保持数据与显示分离,使得数据格式的改变只需修改XSL样式表即可,无需改动底层XML数据。 总结来说,XSL转XML成HTML的过程是利用XSLT将XML文档的...

Global site tag (gtag.js) - Google Analytics