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

dhtml基于webService服务的列表(使用xsl翻译xml)

    博客分类:
  • xml
阅读更多

xml数据岛的数据格式:

 

 

<?xml version="1.0" encoding="GBK"?> 
<list>
 <ExchangeDataInfo>
  <id>1e4929642d904b6eba7db731b13ef960</id> 
  <name>abc</name> 
  <date>20120710 14:50:22.0 CST</date> 
  <updateDate>20120710 14:50:22.0 CST</updateDate> 
  <size>4168</size> 
  <desc>本文件是用于数据文件管理组件中运行测试用例使用</desc> 
 <keyWords>
  <string>白图片</string> 
  <string>数据管理</string> 
  <string>上传</string> 
  <string>测试</string> 
  </keyWords>
 <exchangeInfo>
  <taskINSID>1</taskINSID> 
  <taskSourceIP>172.16.10.30</taskSourceIP> 
  <exchangeNodeID>1</exchangeNodeID> 
  <taskType>EXCHANGENODEDownLOAD</taskType> 
  <exchangeDataType>SPATIALDATA</exchangeDataType> 
  <exchangeFileType>SHAPE</exchangeFileType> 
  <isValid>true</isValid> 
  <sequenceEnd>20120716 16:41:26.453 CST</sequenceEnd> 
  <downLoadTimes>0</downLoadTimes> 
  <orderIndex>1</orderIndex> 
  </exchangeInfo>
  </ExchangeDataInfo>
 <ExchangeDataInfo>
  <id>0c091601eb5c474785ee046c358fa0ac</id> 
  <name>又是白图片</name> 
  <date>20120708 10:20:22.0 CST</date> 
  <updateDate>20120708 10:20:22.0 CST</updateDate> 
  <size>4168</size> 
  <desc>本文件是用于数据文件管理组件中运行测试用例使用</desc> 
 <keyWords>
  <string>又是白图片</string> 
  <string>数据管理</string> 
  <string>下载</string> 
  <string>测试</string> 
  </keyWords>
 <exchangeInfo>
  <taskINSID>2</taskINSID> 
  <taskSourceIP>172.16.10.30</taskSourceIP> 
  <exchangeNodeID>1</exchangeNodeID> 
  <taskType>EXCHANGENODEDOWNLOAD</taskType> 
  <exchangeDataType>SPATIALDATA</exchangeDataType> 
  <exchangeFileType>SHAPE</exchangeFileType> 
  <isValid>true</isValid> 
  <sequenceEnd>20120716 16:41:26.872 CST</sequenceEnd> 
  <downLoadTimes>2</downLoadTimes> 
  <orderIndex>2</orderIndex> 
  </exchangeInfo>
  </ExchangeDataInfo>

  </list>

 

 

 XSL文件内容 :xsl就是xml的样式(css)

 

 

 

<?xml version="1.0" encoding="GBK"?>
<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:wfs="http://www.opengis.net/wfs">
	<!-- 可以删除 作用不明-->
	<xsl:output method="xml" omit-xml-declaration="no" indent="no" />
	<!-- 可以删除 作用不明-->
	<xsl:param name="enableServiceNode"></xsl:param>
	<!--模板与xml数据岛匹配的节点名称,如果是/,则表示根节点,当前为list -->
	<xsl:template match="list">
		<!-- element是输出或者说返回给用户的xml,name表示节点名称,那么这样就会输出一个rows的节点-->
		<xsl:element name="rows">
			<!-- xsl的for-each用于循环xml数据岛中的数据-->
			<xsl:for-each select="ExchangeDataInfo">
				<!-- 输出一个row几点-->
				<xsl:element name="row">
					<!-- 给row节点添加一个id属性,id属性的值等于xml数据岛中的id节点的值-->
					<xsl:attribute name="id">
						<!-- 获取xml数据岛中id节点的值-->
						<xsl:value-of select="id" />
					</xsl:attribute>
					<!--输出一个cell节点 -->
					<xsl:element name="cell">
						<!-- 获取xml数据岛中id节点的值-->
						<xsl:value-of select="id" />
					</xsl:element>
					<!--输出一个cell节点-->
					<xsl:element name="cell">
						<!--输入固定的字符,不从xml数据岛中读取数据-->
						images/RAR.png
					</xsl:element>
					<xsl:element name="cell">
						<!--xsl的choose用法:when,otherwise-->
						<xsl:choose>
						<!--	语法表示:如果xml数据岛中的name属性的长度大于100 
							string-length()方法用于获取字符串的长度
							test="..."用于判断
						-->
							<xsl:when test="string-length(name) &gt; 100">
								<!-- 给返回的数据前添加b标签,实现加粗效果,使用substring(aString,start,end)截取字符串-->
								&lt;b&gt; <xsl:value-of select="substring(name,0,100)" />...zip&lt;/b&gt;
							</xsl:when>
							<!--否则的话,执行这段代码-->
							<xsl:otherwise>
								<!--直接输出xml数据岛中的name属性,并追加b标签-->
								&lt;b&gt;<xsl:value-of select="name" />&lt;/b&gt;
							</xsl:otherwise>
						</xsl:choose>
					</xsl:element>
					<xsl:element name="cell">
						<xsl:value-of select="size" />
					</xsl:element>
					<xsl:element name="cell">
						<xsl:value-of select="date" />
					</xsl:element>
					<xsl:element name="cell">
						<!--xml数据岛是多层次的节点的使用方法:使用/号,例如:parent/son -->
						<xsl:if test="exchangeInfo/taskType = 'CENTERUPLOAD'">
							<!--输出图片-->
							&lt;img src="images/up.png"/&gt;
						</xsl:if>
						<xsl:if test="exchangeInfo/taskType = 'CENTERDOWNLOAD'">
							&lt;img src="images/down.png"/&gt;
						</xsl:if>
						<xsl:if test="exchangeInfo/taskType = 'EXCHANGENODEUPLOAD'">
							&lt;img src="images/up.png"/&gt;
						</xsl:if>
						<xsl:if test="exchangeInfo/taskType = 'EXCHANGENODEDOWNLOAD'">
							&lt;img src="images/down.png"/&gt;
						</xsl:if>
					</xsl:element>
					<xsl:element name="cell"> 
						<!--添加js脚本的响应时间:通过拼凑span标签,并添加onclick实现-->
						&lt;span href="#" onclick="DataManager.downData('<xsl:value-of select="id" />')"&gt;&lt;img style="margin:0px;padding:0px" src="images/download0.png"/&gt;&lt;/span&gt;
						&lt;span href="#" onclick="DataManager.detailData('<xsl:value-of select="id" />')"&gt;&lt;img style="margin:0px;padding:0px;position:relative;left:-3px;" src="images/detail0.png"/&gt;&lt;/span&gt;
						&lt;span href="#" onclick="DataManager.deleteData('<xsl:value-of select="id" />')"&gt;&lt;img style="margin:0px;padding:0px;position:relative;left:-6px;" src="images/del.png"/&gt;&lt;/span&gt;
					</xsl:element>
				</xsl:element>
			</xsl:for-each>
		</xsl:element>
	</xsl:template>
</xsl:stylesheet>
 

 

 

显示结果见附件:使用dhtmlxgrid的显示结果

 

xsl有自己的函数库,详见:http://blog.csdn.net/ccsdba/article/details/1635050  和 http://blog.163.com/chenyunpei_studio@126/blog/static/36578255200762882452192/

 

xsl也允许自定义函数,详见:http://hi.baidu.com/godghdai/blog/item/e8955066580ff62fab184ce9.html

 

但是,自定义函数在j2ee应用中,会碰到安全设置不允许的问题,所以一直没有实质性的效果。

 

下面是自己的尝试

 

 

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:msxsl="urn:schemas-microsoft-com:xslt"
	xmlns:user="http://supermap.com/"> 
	<msxsl:script language="javascript" implements-prefix="user"> 
	function GetName(node) {
		return (node+"aaaaaaaaaaaaaaaaf").substr(1,8);
	}
	]]> 
</msxsl:script> 
	<xsl:template match="list">
		<xsl:element name="cell"><!--自定义函数的使用方法-->
			&lt;b&gt;<xsl:value-of select="user:GetName(name)" />&lt;/b&gt;
				<xsl:if test="string-length(name) &gt; 3">
						&lt;b&gt;<xsl:value-of select="substring(name,0,15)" />...&lt;/b&gt;
				</xsl:if>
			</xsl:element>
	</xsl:template>
</xsl:stylesheet>

 

这种写法,在jsp页面中会提示:页面安全设置不允许在此使用函数 这样类似的提示,最终导致不能返回正常的记过。

 

 

 

 

 

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:msxsl="urn:schemas-microsoft-com:xslt"
	xmlns:user ="http://www.mycompany.org/ns/function" 
	xmlns:lxslt="http://xml.apache.org/xslt"
	exclude-result-prefixes="user">
	
	<lxslt:component prefix="user" elements="rules" functions="GetName">  
		<msxsl:script language="javascript" implements-prefix="user"> 
			<![CDATA[ 
			function GetName(node) {
				return (node+"aaaaaaaaaaaaaaaaf").substr(1,8);
			}
		]]> 
	</msxsl:script>
	</lxslt:component> 
	<xsl:template match="list">
		....
	</xsl:template>
</xsl:stylesheet>
 

这种写法,绕开了安全设置的提示,但是会提示:命名空间不包含任何函数的提示,最终还是失败。

 

xsl中的除法:div方法

xsl中的数字格式化:format-number(anumber,'0.00');//表示保留两位小数

 

 

<xsl:choose>
							<xsl:when test="number(size) > (1024*1024*1024)">
								<xsl:value-of select="format-number(number(size) div (1024*1024*1024),'.00')" />G
							</xsl:when>
							<xsl:when test="number(size) > (1024*1024)">
								<xsl:value-of select="format-number(number(size) div (1024*1024),'.00')" />M
							</xsl:when>
							<xsl:when test="number(size) > 1024">
								<xsl:value-of select="format-number(number(size) div 1024,'.00')" />k
							</xsl:when>
							<xsl:otherwise>
								<xsl:value-of select="size" />
							</xsl:otherwise>
						</xsl:choose>
						
 

 

//dhtmlgrid的使用:

//listServiceURL = "testdata/dataexchange1.xml";//TODO 测试数据
mygrid.parse(TransFormUtil.transForm(listServiceURL,"xslt/dataexchange.xsl",null,3));
 

Transform.js:

 

 

/*-----------------------通用xsl转换类(静态类)-----------------*/
/*-----------------------版本:V1.0------------------*/
/*-----------------------作者:songxw-----------------*/
///<sumary>
/// xsl转换类--用于适应firefox以及IE各版本
///</sumary>
TransFormUtil=new function()
{
	/// <summary>
	/// 转换过程
	/// </summary>
	///<params name="xml">要转换的xml源</params>
	///<params name="xsl">执行转换的式xsl模板</params>
	///<params name="params">转换参数:json格式</params>
	///<params name="resouceType">数据源类型:0表示xml为string/xsl为string,1表示xml为string/xsl为file,2表示xml为string/xsl为file,3表示xml为file/xsl为file</params>
	/// <returns>执行转换后的html结果</returns>
	this.transForm=function(xml,xsl,params,resouceType)
	{
		//获取浏览器版本信息
	    var browser=getBrowser();
	    var formatHtml="";
		var xmlDom=BrowserAdepter.getDomDocument();
		xmlDom.async = false;
		switch(resouceType)
		{
				//从string中加载数据源
			case 0:
			case 1:
				xmlDom=BrowserAdepter.loadXML(xml);
				break;
				//从file中加载数据源
			case 2:
			case 3:
				xmlDom=BrowserAdepter.load(xml);
				break;
		}
		//必须使用线程安全的Dom对象
		var xslDom =BrowserAdepter.createFreeThreadedDocument();
	    xslDom.async = false;
	    switch(resouceType)
		{
				//从string中加载数据源
			case 0:
			case 2:
				xslDom=BrowserAdepter.loadXML(xsl);
				break;
				//从file中加载数据源
			case 1:
			case 3:
				if(typeof xslDom.load !='undefined'){
					xslDom.load(xsl);
				}
				else{
					xslDom=BrowserAdepter.load(xsl);
				}
				break;
		}
		if(BrowserAdepter.getXml(xmlDom)=="") return "";
	    var xslTemplate =BrowserAdepter.createXSLTemplate();
		
		//适用于IE
	    if(browser.isIE)
	    {
			xslTemplate.stylesheet =xslDom;
			// 创建XslProcessor对象
			var xslProcessor = xslTemplate.createProcessor();
			xslProcessor.input = xmlDom;
			//转换参数
			if(params!=null && params!=undefined)
			{
				for(var key in params)
				{
					xslProcessor.addParameter(key,eval("params."+key));
				}
			}
			// 执行XSLT转换
			xslProcessor.transform();
	    	formatHtml=xslProcessor.output; 
	   	}
	   	//适用于firefox
	   	else
	   	{
		     xslTemplate.importStylesheet(xslDom); 
		     //转换参数
			if(params!=null && params!=undefined)
			{
				var value="";
				for(var key in params)
				{
					value=eval("params."+key);
					xslTemplate.setParameter(null,key,value);
				}
			}
		     var result = xslTemplate.transformToFragment(xmlDom,document); 
		     var xmls = new XMLSerializer(); 
		     formatHtml=xmls.serializeToString(result); 
	   	}
		formatHtml=formatHtml;
	    xmlDom=null;
	    xslDom=null;
	    xslTemplate=null;
	    return formatHtml.replace("<?xml version=\"1.0\"?>","");
	};
}

 

xsl大写转换成小写:translate(str,'A...Z','a...z')

 

<!--定义变量-->

<xsl:variable name="uppercase">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
<xsl:variable name="lowercase">abcdefghijklmnopqrstuvwxyz</xsl:variable>

<!--大小写转换-->
<td class="title">策略类型</td>
<td class="value"><xsl:value-of select="translate(strategyType,$uppercase,$lowercase)"/></td>
 

xsl中进行非空判断

 

<xsl:if test="processInfo !=null">
	<xsl:value-of select="processInfo"/>
</xsl:if>
 

 

  • 大小: 8.1 KB
分享到:
评论

相关推荐

    微软Dhtml网页开发控件帮助文档(翻译)

    微软Dhtml网页开发控件帮助文档(翻译)微软Dhtml网页开发控件帮助文档(翻译)

    html xml xhtml dhtml

    XML常用于Web服务、RSS源、配置文件等。 XHTML是HTML向XML的过渡,它继承了HTML和XML两者的特点。XHTML要求所有的标签都必须正确关闭,所有的属性必须用双引号包围,并且所有的标签名都必须小写。这些规则是为了...

    DHTML+CSS2+JAVASCRIPT+XML

    在IT领域,DHTML、CSS2、JavaScript和XML是构建现代网页和应用程序的重要技术。这些技术的结合使得开发者能够创建出交互性强、表现丰富的网络体验。 **DHTML(Dynamic HTML)** 是一种在HTML文档中引入动态效果的...

    HTML,DHTML,VRML,XML功能分析与比较研究

    HTML,DHTML,VRML,XML功能分析与比较研究 HTML,DHTML,VRML,XML功能分析与比较研究

    DHTML 手册 DHTML 手册

    DHTML 手册通常会涵盖这些基础知识,以及更高级的话题,如框架库(如jQuery)、AJAX使用、响应式设计、跨浏览器兼容性等。通过深入学习和实践DHTML,开发者能够创建更加丰富、互动的网页应用,提升用户与网页的交互...

    基于DHTML+AJAX实现的 Menu类库scripts代码例子

    本篇将深入探讨基于DHTML+AJAX实现的Menu类库scripts代码实例,这一技术主要用于构建动态、交互式的网页菜单系统。DHTML(Dynamic HTML)是一种结合了HTML、CSS、JavaScript以及DOM(Document Object Model)的技术...

    DHTML XML 实用手册(标识 语法 函数 方法 介绍)

    **DHTML XML 实用手册(标识 语法 函数 方法 介绍)** DHTML(Dynamic HTML)和XML(Extensible Markup Language)是Web开发中的核心技术,它们共同为创建动态、交互性和数据驱动的网页提供了强大的支持。 DHTML是...

    DHTML手册 DHTML手册

    JavaScript通常用于操作DOM,添加、删除或修改页面元素,从而实现DHTML的效果。 CSS在DHTML中扮演着重要角色,它负责定义元素的外观和布局。通过选择器和规则,我们可以改变HTML元素的颜色、大小、位置等属性。CSS3...

    css+DHTML+js+XMLDOM手册

    通过XMLDOM,开发者可以使用JavaScript或其他支持DOM的编程语言来读取、修改、创建和更新XML文档。XMLDOM提供了诸如节点操作(如创建、删除和移动节点)、查找特定节点、以及设置和获取属性值等功能,使得处理XML...

    Dhtml手册(Dhtml手册.chm)

    本Dhtml手册.chm文件是一个关于DHTML的综合参考资料,对于想要深入了解和学习DHTML的开发者来说,是一份宝贵的资源。 1. **HTML基础**:DHTML建立在HTML的基础上,HTML是超文本标记语言,用于创建网页结构。DHTML...

    DHTML用户界面,使用方便

    在这个名为“DHTML用户界面,使用方便”的主题中,我们主要探讨如何利用DHTML技术构建易于使用的界面。 首先,DHTML的核心在于其动态特性。通过JavaScript,我们可以编写脚本来改变HTML元素的位置、样式和内容,而...

    Dhtml帮助文档 (Dhtml帮助文档)

    这些组件通常基于DHTML技术,利用JavaScript和CSS实现丰富的交互效果和动态功能。 DHTMLX Suite的使用通常涉及以下几个步骤: 1. **引入库**:在HTML文件中添加DHTMLX Suite的JavaScript和CSS引用。 2. **初始化...

    基于XML的单元自测应用的设计实现.pdf

    【标题】:基于XML的单元自测应用设计实现 ...总的来说,基于XML的单元自测应用巧妙地结合了XML、DOM、XSL、JavaScript和DHTML技术,构建了一个高效、适应性强且互动的在线测试系统,有助于提升网络课程的教学效果。

    XML初学入门教程(pdf)

    2. **样式表**:使用 CSS 或 XSL 来格式化 XML 内容,使其在浏览器中呈现为友好的界面。 ### 第六章:微软的 XML 解释器 微软开发了自己的 XML 解释器,支持在 Windows 系统上处理 XML 文档。这包括了: 1. **...

    XML 中的常见问题 (二)

    - DHTML通过DOM增强了客户端交互性,允许使用脚本动态修改页面内容。 - XML与HTML结合,为开发者提供了构建富Web应用的新方法。开发者可以通过脚本展示和处理基于XML的数据,同时利用XSLT或直接DOM操作呈现不同...

    DHTML常用标签的使用说明,非常详细

    DHTML常用标签的使用说明,非常详细。DHTML常用标签的使用说明,非常详细。DHTML常用标签的使用说明,非常详细。DHTML常用标签的使用说明,非常详细DHTML常用标签的使用说明,非常详细DHTML常用标签的使用说明,非常...

    DHTML手册 DHTML

    **DHTML(Dynamic HTML)**是一种用于创建交互式和动态网页的技术,它结合了HTML、CSS、JavaScript以及DOM(文档对象模型)等技术,使得网页不仅具有静态展示内容的能力,还能实现动态效果和用户交互。 **HTML...

    最新收集的实用 DHtml 代码例子

    1. **HTML基础**:DHtml基于HTML,HTML是超文本标记语言,用于构建网页结构。理解HTML的基础语法,如标签、属性和元素嵌套,是学习DHtml的第一步。例如,`&lt;div&gt;`标签常用于创建内容区域,`&lt;a&gt;`标签用于创建链接,`...

Global site tag (gtag.js) - Google Analytics