java中通过xsl将xml数据装换为html格式字符串
来源:互联网 发布:学生沉迷网络英语作文 编辑:程序博客网 时间:2024/06/05 17:38
直接给代码:
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元素后显示在页面中样式:
- java中通过xsl将xml数据装换为html格式字符串
- 如何将xml格式的字符串结合xsl文件转换为html 格式字符串输出
- java中利用javax.xml.transform.Transformer将xml通过xsl样式转化成html
- [唐胡璐] - C#将QTP结果(XML+XSL文档)转换为HTML格式
- java中使用XStream实现将对象转为xml格式字符串或者将xml格式的字符串转换为对象
- 将HTML表单数据存储为XML格式
- 将HTML表单数据存储为XML格式
- 将HTML表单数据存储为XML格式
- 将HTML表单数据存储为XML格式- -
- (java)将字符串转换为XML格式的字符串
- xml+xsl转换为html
- java中使用XStream实现将对象转为xml格式字符串或者将xml格式的字符串转换为对象==
- XML+XSL输出HTML时,直接将XML输出为HTML的2种方法
- 将字符串编辑为xml格式
- 如何将数据转化为XML格式
- 将数据库数据转换为xml格式
- Java中怎么将数据封装成XML格式
- Java中怎么将数据封装成XML格式
- OpenStack相关资源
- 刚开始走向工作岗位初遇到的一些问题
- 了解目标攻击:我们真正对抗的是什么
- 开发相关-编码相关-ASCII对照表
- C语言指针与数组
- java中通过xsl将xml数据装换为html格式字符串
- java程序性能优化
- Produce entropy for /dev/random in Linux
- CE6下兼容和非兼容位图的深入分析
- Git管理本地代码(二)
- 多态基类应声明 virtual析构函数
- javascript textarea字数限制
- 使用 GDB 调试多进程程序
- 1.跟我一起学建站之tomcat简单使用