- 浏览: 291609 次
- 性别:
- 来自: 上海
最新评论
-
alen252:
同步请求不是回执行完,再接着往下走么?不然怎么叫同步。
“可恶”的ajax 同步请求 -
c888999c:
挺好 稍微改点就能用
利用Spring MVC 上传图片文件 -
searchnomore:
不管用
使用Java匹配过滤<script>标签,不区分大小写 -
iwlk:
String str = "11<script ...
使用Java匹配过滤<script>标签,不区分大小写 -
zhmy0129:
org.apache.commons.lang.StringU ...
在后台判断参数是否为空时应当注意的一点
在HTML,JSP当中使用XML与XSL展示部分数据
需求分析:
通常项目当中有一些固化或不经常变化的内容,且这些内容通常是使用XML保存。
但在前台页面上需要使用到这些数据,而且有可能会将其中的内容做为网页的一部分用来展示给用户。通常的做法是使用JavaScript读取这个XML进行解释,然后再创建相应的HTML标签,并将内容插入相应的位置上。这种做法不但需要编写大量的JS,而且会影响页面加载速度。如果利用XML+XSL进行数据的格式转化,再利用JS动态加载XML与XSL,便可以很方便的获取所需的数据,而且调用不同的XSL,可以展示不同的格式。
所牵涉到的基本技术:
1:XML
2:XPATH
3:JavaScript
先看一个示例:
如图
这是一个使用XML+XSL生成的地区下拉列表。 整个演示所需文档如下:
一、地区信息来自XML文档 Area.xml
以上是一个地区的XML文档,其中包含了三级省市区数据,通过属性"p"来寻找上一级,如果p=0,则代表当值数据为省份(顶级) <root>
<!-- i_ID,n_名称,p_上一级ID,s_是否有下级 -->
<a i="107" n="安徽省" p="0" s="false"/>
<a i="93" n="北京市" p="0" s="false"/>
<a i="103" n="北京市" p="93" s="false"/>
<a i="77" n="长宁区" p="67" s="true"/>
<a i="105" n="朝阳区" p="103" s="false"/>
<a i="91" n="崇明县" p="67" s="true"/>
<a i="89" n="奉贤区" p="67" s="true"/>
<a i="108" n="福建省" p="0" s="false"/>
<a i="109" n="甘肃省" p="0" s="false"/>
<a i="110" n="广东省" p="0" s="false"/>
<a i="101" n="广西区" p="0" s="false"/>
<a i="111" n="贵州省" p="0" s="false"/>
<a i="112" n="海南省" p="0" s="false"/>
<a i="130" n="合肥市" p="107" s="false"/>
<a i="113" n="河北省" p="0" s="false"/>
<a i="114" n="河南省" p="0" s="false"/>
<a i="102" n="黑龙江" p="0" s="false"/>
<a i="80" n="虹口区" p="67" s="true"/>
<a i="97" n="湖北省" p="0" s="false"/>
<a i="96" n="湖南省" p="0" s="false"/>
<a i="75" n="黄浦区" p="67" s="true"/>
<a i="115" n="吉林省" p="0" s="false"/>
<a i="85" n="嘉定区" p="67" s="true"/>
<a i="116" n="江苏省" p="0" s="false"/>
<a i="117" n="江西省" p="0" s="false"/>
<a i="86" n="金山区" p="67" s="true"/>
</root> <!-- 演示数据,与图片所示有所不同-->
二、XSL文档
<?xml version="1.0" encoding="UTF-8"?>
<!--定义当前XML文档为xsl格式-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--math表示匹配当前XML所有内容,也可以指定具体的某些值,取值方式参考XPATH语法-->
<xsl:template match="/">
<!--在此可以编写HTML代码-->
<h2>地区下拉表</h2>
<div>
<div>省市:</div>
<div>
<select>
<!--读取root下所有属性p=0的a标签,进行循环-->
<xsl:for-each select="root/a[@p='0']">
<!--对于需要给HTML标签赋值时,只能使用{}来取值,
不可以使用<xsl:value-of>的形式取值。这里取的是当前标签的i属性的值,
因为是在循环里,所以每次取值都不同-->
<option value="{@i}">
<!--如果是在HTML内,或外面赋值,则只能使用<xsl:value-of>的形式取值,
这里取的是当前标签的n属性的值-->
<xsl:value-of select="@n"/>
</option>
</xsl:for-each>
</select>
</div>
</div>
</xsl:template>
</xsl:stylesheet>
三、在准备好了XML,XSL之后,剩下的事就是如何在页面上根据需要调用此XML文档来显示了,这里我们需要使用JS来加载XML与XSL并对其进行解析。由于IE与FF解析XML与XSL的方法及加载XML的方法不同,所以这里采用jquery框架进行判断,也可以自行写相关的方法以区别IE\FF的不同。
用到的两个最主要的方法
1:load(xmlPath) 所有方法都有部分代码基于jquery
//兼容大部分浏览器 读取外部XML文档返回xmlDoc对象 function load(x) { var xmlDoc; if ($.browser.msie) { xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); xmlDoc.async = false; xmlDoc.load(x); return xmlDoc; } else if ($.browser.safari) { xmlDoc = getxml(x).responseXML; return xmlDoc; } else if ($.browser.mozilla) { xmlDoc = document.implementation.createDocument('', '', null); xmlDoc.async = false; xmlDoc.load(x); return xmlDoc; } else { xmlDoc = getxml(x).responseXML; return xmlDoc; } } //供load方法调用 function getXmlHttp() { var xmlhttp; if (window.ActiveXObject) { try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } return xmlhttp; } else if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); return xmlhttp; } return xmlhttp; } //供load方法调用 function getxml(x) { var xmlhttp = getXmlHttp(); if (xmlhttp != null) { xmlhttp.open("GET", x, false); xmlhttp.send(null); return(xmlhttp); } else { alert("对不起,您的浏览器不支持 XMLHTTP.11"); return false; } }
2:showXML() 在网页上显示XML内容,并使用相应的XSL进行解析
<!--EndFragment-->
/** * 加载XML及对应的XSL文档,直接在页面上进行显示 * @param xml XML路径 * @param xsl XML样式文件 */ function showXML(xml, xsl) { // Load XML 这里的load方法调用的是上面的laod方法 var xmlDoc = load(xml); // Load XSL var xslDoc = load(xsl); // 如果是非IE浏览器,则对解析器进行重写 if (!$.browser.msie) { Node.prototype.transformNode = function (oXslDom) { var oProcessor = new XSLTProcessor(); oProcessor.importStylesheet(oXslDom); var oResultDom = oProcessor.transformToDocument(this); var xmls = new XMLSerializer(); var sResult = xmls.serializeToString(oResultDom); if (sResult.indexOf(" <transformiix:result") > -1) { sResult = sResult.substring(sResult.indexOf(">") + 1, sResult.lastIndexOf(" <")); } return sResult; }; } document.write(xmlDoc.transformNode(xslDoc)); }
四、到此所有准备工作已完成,可以开始编写 HTML代码,当前你也可以将这此内容放入其它的页面当中如JSP\ASP
<!--EndFragment-->
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>Simple jsp page</title></head> <script type="text/javascript" src="/js/serv/comm/jquery.js"></script> //这个JS包含有上面的laod等方法 <script type="text/javascript" src="/js/public/comm.js"></script> <body> <script type="text/javascript"> showXML("/x/comm/area.xml","/test/xml/area.xsl"); </script> </body> </html>
<!--EndFragment-->
<!--EndFragment-->
以下附件为整个文章涉及到的内容,但不能直接在本地打开浏览,原因是load方法不能直接读取本地文件,需要部署到项目当中。
有问题或有好的建议,欢迎大家一起探讨
<!--EndFragment--><!--EndFragment-->
<!--EndFragment-->发表评论
-
换种思路解决http与https之间的页面调用问题
2011-08-09 12:45 11109业务场景: 主页面为http协议的普通页面。 ... -
更正eclipse在Windows7下会连接其它IP时自动转为IPV6。
2010-03-22 15:20 1708在winodows7上使用eclipse时,如果项目里需要连接 ... -
当需要在XML文档中加空格时需转换成# 而不是
2009-09-23 16:12 2858将空格的代码: 转换成 即 ... -
使用JS高亮页面当中的关键字
2009-09-21 15:23 4463工作需要,自己写了个简单的高亮页面当中的关键字 /* ... -
记录一下使用xslt解析XML的几个小知识点
2009-09-11 15:47 2400<?xml version="1.0" ... -
使用Java匹配过滤<script>标签,不区分大小写
2009-07-08 16:41 6289为了过滤一些内容当中包含有JS代码,因此加了对字符的过滤设置。 ... -
解决使用response返回值为乱码的问题
2009-06-30 11:04 3154很简单的两句话: 在控制器加上如下两句: response ... -
使用jquery动态生成的标签,需要在代码当中绑定才可以实现事件的监听,!
2009-06-23 14:30 3945近日工作当中,需要对由jquery动态生成的标签添加一些事件效 ... -
JavaScript 当中的带参构造对象
2009-06-11 16:28 1260工作中需要用到封装一个JS对象,但是又想在构造这个对象的时候直 ... -
JS +XML +Jquery 实现三级联动菜单,自己封装的一个对象方便使用
2009-06-02 16:13 5197通常项目当中都会用到三级联动菜单,比如省市区的选择等现将自己封 ... -
使用JSTL标签格式化时间与货币形式
2009-06-02 13:28 4597经常要用到格式化一些时间格式或货币格式如: 2009年06月 ... -
js 判断当前链接是否为指定的网址开头
2009-04-12 22:26 1818if(document.referrer !=" w ... -
一段很短的代码可以自动提示文本框已输入多少个字符
2009-04-05 22:28 2264通常大家都有这样的需求: 一个文本输入框,限定了用户只能输入多 ... -
在使用Hibernate自动创建表时,碰到一个很奇怪的问题,记下来给碰到同样问题朋友一个解决方案!
2009-03-13 14:37 1468说来挺奇怪,在同样的环境下,可以创建任何一张新的表,但就是有一 ... -
在安装启动GlassFishV2时碰到的一个小问题!
2009-02-26 19:33 2181从sun网上下载了一个GlassFishV2的安装 jar包, ... -
图文并茂讲解在VM下如何使用ubuntu系统进行java的开发
2009-02-17 15:26 5204首先安装vm软件,下载ubuntu系统。 我这里下载的vm是 ... -
自己用javascript写了一些代码,用来批量下载“绝影”博客上《疯狂的程序员》文章
2008-12-12 12:53 2575近日,在拜读了“绝影”博客上《疯狂的程序员》连载文章后,感触颇 ... -
看到一个不错的东东:获取各种常用时间java
2008-12-04 18:53 1538以下内容转载自论坛某位同志的文章,觉得以后可能用得上,所以就 ... -
一种比较实用的方法用来测试某个方法运行所消耗的时间
2008-12-03 15:26 1375这是一个比较实用的小技巧,平时我们在写代码的时候需要测试某个方 ... -
使用JavaScript比较用户输入的内容大小
2008-11-25 17:34 2516工作中碰到这样一个问题:在页面上有一个输入框供用户输入,当用户 ...
相关推荐
使用JavaScript+XML+XSL创建树形目录,源码及示例
XSL语法详细参考手册,XML设计者的理想教材
本章主要讲述XML基本概念, XML的三种显示样式:CSS(Cascading Style Sheet,层叠式样式表单)、XSL(Extensible Style Language,扩展的标记语言)和Data Island(数据岛) 如何利用JSP操作XML文件。
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
本系统利用JSP开发环境 tomcat 6.0 测试 其中查询部分均利用了XML转换 XSL显示, 数据库利用sql 2003 功能包括 数据添加 修改 删除 以及查询,适合初学JSP 和 XML的初学者。
第一部分 JSP 技术与J2EE 技术 第1 章 JavaBeans 组件技术 1.1 什么是JavaBeans 1.2 JSP 中如何使用JavaBeans 1.3 JavaBeans 的Scope 属性 1.4 JavaBeans 应用实例 1.5 本章小结 第2 章 Enterprise JavaBeans 2.1 ...
五.Meta数据(Metadata)---专业的XML使用者会使用meta数据来工作。 在HTML中我们知道可以使用meta标识来定义网页的关键字,简介等,这些标识不会显示在网页中,但可以被搜索引擎搜索到,并影响搜索结果的排列顺序。...
xsl标识库jar包 - Jsp结合XML+XSLT将输出转换为Html格式
61. 结合XML和XSL输出HTML页面? 62. 制作动态树型菜单制作? 63. 制作类似QQ的短消息提示? 64. 用jfreechat制作拄、饼、曲线图型? 65. 文本框怎么只容许输入数字? 66. 打开Word和Execl文件? 67. 生成Word 和 Excel...
用JSP、Servlet、Oracle、SQLServer写的工具,能把数据库里的数据生成XML文件。可以选择两种数据库连接:Oracle或SQLServer,然后指定Oracle中的用户或SQLServer中的库,以及相应的表、字段,按XSL定义的XML样式预览...
表示层 JSP、HTML、DHTML、XML/XSL、JAVA BEAN、TAGLIB 流程控制层 通过一个特定的请求处理器JAVA类:RequestProcessor.java,将客户端的请求(如:http://localhost:6888/myshop/shp/cart 转化成某个事件(如:...
第二部分 JSP 技术和XML 技术 第5 章 XML 简介 5.1 XML 简介及其语法规则 5.2 DTD 的书写及实例 目录 5.3 CSS 与XSL 及其实例 5.4 XHTML 简介 5.5 WML 简介 5.6 本章小结 第6 章 JSP 与XML 联合开发技术 6.1 XML 与...
数字转中文 128 自动计算金额 129 JSP页面打印中使用WebBrowser控件 130 不刷新页面添加新的类别 131 鼠标滚动缩放图片 132 根据输入的表名生成输入数据表格 133 JSP表格输出到Excel 134.JSP...
testJson.war 使用JSON与服务器传递信息的项目文件(可直接在Tomcat下发布运行)。 \lib目录 在Java中使用JSON需要的lib包列表。 \testJson\src\jsonExercise\JSONServlet.java 处理页面请求的...
xerces xalan taglibs-xsl是JSP中调用<xsl:apply xml="result.xml" xsl="result.xsl"></xsl:apply>的xslt标签所必须的包。 还需要另外一个文件到http://download.csdn.net/source/655756下载。
N-Tier式的分布式应用 表示层 JSP、HTML、DHTML、XML/XSL、JAVA BEAN、TAGLIB 流程控制层 通过一个特定的请求处理器JAVA类:RequestProcessor.java,将客户端的请求(如:http://localhost:6888/myshop/shp/cart 转化...
8.1.3 XML DTD的建立与使用 8.1.4 文档显示与样式单 8.1.5 XML链接语言 8.1.6 实用XML工具概览 8.2 XML中数据与信息交换 8.2.1 XML数据源 8.2.2 XML在数据库中的应用模式 8.2.3 XML数据交换技术及应用 8.3 ...