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

xsl使用变量

阅读更多
需求:保留路径最后一个目录 (test文件)
<filePath>D:\upload\2012\test文件</filePath>
xsl使用变量样例:
<xsl:variable name="AAA" select="substring-after(filPath,'D:\')" />
<xsl:variable name="BBB" select="substring-after($AAA,'.')" />
<xsl:variable name="CCC" select="substring-after($BBB,'.')" />
<xsl:value-of select="$CCC"/>


#xsl使用变量范例

<xsl:variable name="a" select="substring-after(filePath,':\')" />
<!-- 第1级chose -->
<xsl:choose>
	<xsl:when test="contains($a,'\')">
		<!-- 第2级chose -->
		<xsl:choose>
			<xsl:when test="contains($b,'\')">
				<xsl:variable name="c" select="substring-after($a,'\')" />
				<xsl:value-of select="$c" /> 
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="$b" />
			</xsl:otherwise>
					
		</xsl:choose>
	</xsl:when>
	<xsl:otherwise>
		<xsl:value-of select="$a" />
	</xsl:otherwise>
</xsl:choose>
 

//xsl中打印空格
//xsl中空格使用:&#160;代替 或者&#xa0;
 

xsl应用实例
技术点:
 - 1 声明全局变量;
 - 2大小写转换;
 - 3返回模板;
 - 4xsl除法;
 - 5xsl浮点格式化;
 - 6choose使用;
 - 7xsl使template自定义模板和使用call-template调用自定义模板


#下边是xml文件和xsl文件实例


<?xml version="1.0" encoding="UTF-8" ?>
<list>
	<TaskinstanceInfo>
		<pkid>2919</pkid>
		<taskdefineId>2</taskdefineId>
		<enodeTaskinsId>0</enodeTaskinsId>
		<taskStatus>COMPLETE</taskStatus>
		<startTime>2012-07-10 15:34:12.0 CST</startTime>
		<lastCompleteTime>2012-07-11 12:00:00.0 CST</lastCompleteTime>
		<filePath>D:\upload\2012\test\a\b\c\d\e\f</filePath>
		<!-- 单位:字节 -->
		<fileSize>122420</fileSize>
		<fileFormat>E00</fileFormat>
		<processInfo>中心处理中</processInfo>
		<updateType>INCREMENT</updateType>
		<transportType>FTP</transportType>
		<dataType>SPATIALDATA</dataType>
		<taskSourceIp>172.16.10.16</taskSourceIp>
		<exchangeNodeId>2</exchangeNodeId>
		<taskSourceDesc>null</taskSourceDesc>
		<taskCreaterId>4</taskCreaterId>
		<taskCreaterName>Tite</taskCreaterName>
		<taskCreaterDept>国土资源厅</taskCreaterDept>
		<localSourceId>d388f9d1-9453-4313-b1a2-c99fe1f84856</localSourceId>
		<localCatalogId>0c091601-eb5c-4747-85ee-046c358fa0ac</localCatalogId>
		<tranFileFormat>GDB</tranFileFormat>
		<sequenceState>VALID</sequenceState>
		<orderIndex>3</orderIndex>
	</TaskinstanceInfo>
	<TaskinstanceInfo>
		<pkid>2917</pkid>
		<taskdefineId>1</taskdefineId>
		<enodeTaskinsId>0</enodeTaskinsId>
		<taskStatus>START</taskStatus>
		<startTime>2012-07-09 12:00:00.0 CST</startTime>
		<lastCompleteTime>2012-07-12 18:00:00.0 CST</lastCompleteTime>
		<filePath>D:\upload\2012\test2</filePath>
		<!-- 单位:字节 -->
		<fileSize>102400</fileSize>
		<fileFormat>GDB</fileFormat>
		<processInfo>数据开始上传</processInfo>
		<updateType>REPLACE</updateType>
		<transportType>FTP</transportType>
		<dataType>SPATIALDATA</dataType>
		<taskPriority>HIGHEST</taskPriority>
		<taskSourceIp>172.16.10.11</taskSourceIp>
		<exchangeNodeId>1</exchangeNodeId>
		<taskSourceDesc>null</taskSourceDesc>
		<taskCreaterId>1</taskCreaterId>
		<taskCreaterName>Tite</taskCreaterName>
		<taskCreaterDept>国土资源厅</taskCreaterDept>
		<localSourceId>1e492964-2d90-4b6e-ba7d-b731b13ef960</localSourceId>
		<localCatalogId>0c091601-eb5c-4747-85ee-046c358fa0ac</localCatalogId>
		<tranFileFormat>E00</tranFileFormat>
		<sequenceState>VALID</sequenceState>
		<orderIndex>1</orderIndex>
	</TaskinstanceInfo>
</list>
  
<?xml version="1.0" encoding="utf-8"?>
<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>
	<xsl:variable name="uppercase">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>  
	<xsl:variable name="lowercase">abcdefghijklmnopqrstuvwxyz</xsl:variable>  

	<xsl:template match="list">
		<xsl:element name="rows">
			<xsl:for-each select="TaskinstanceInfo">
				<xsl:element name="row">
					<xsl:attribute name="id">
						<xsl:value-of select="pkid" />
					</xsl:attribute>
					<xsl:element name="cell">
							<xsl:value-of select="null" /><!--TODO null表示复选框未选中 -->
					</xsl:element>
					<xsl:element name="cell">
						&lt;img style="cursor:pointer;" alt="zip压缩包" src="images/RAR.png"/&gt;
					</xsl:element>
					<xsl:element name="cell">
							&lt;a  href="javascript:void(0)" onclick="DataManager.detailData('<xsl:value-of select="pkid" />');"&gt;
								    <xsl:call-template name="get-filepath-name">   
								     	 <xsl:with-param name="text" select="filePath"/>   
								    </xsl:call-template>   
							&lt;/a&gt;
					</xsl:element>
					<xsl:element name="cell">
							<xsl:value-of select="taskCreaterDept"></xsl:value-of>
					</xsl:element>
					<xsl:element name="cell">
						<xsl:value-of select="substring-before(string(startTime),' ')" />
					</xsl:element>
					<xsl:element name="cell">
						<xsl:choose>
							<xsl:when test="number(fileSize) > (1024*1024*1024)">
								<xsl:value-of select="format-number(number(fileSize) div (1024*1024*1024),'.00')" />GB
							</xsl:when>
							<xsl:when test="number(fileSize) > (1024*1024)">
								<xsl:value-of select="format-number(number(fileSize) div (1024*1024),'.00')" />MB
							</xsl:when>
							<xsl:when test="number(fileSize) > 1024">
								<xsl:value-of select="format-number(number(fileSize) div 1024,'.00')" />KB
							</xsl:when>
							<xsl:otherwise>
								<xsl:value-of select="fileSize" />
							</xsl:otherwise>
						</xsl:choose>
						
					</xsl:element>
					<xsl:element name="cell">
							&lt;a  href="javascript:void(0)" onclick="DataManager.viewSCCL('<xsl:value-of select="taskdefineId" />')"&gt;<xsl:value-of select="taskdefineId" />&lt;/a&gt;
					</xsl:element>
					<xsl:element name="cell">
						<xsl:choose>
							<xsl:when test="translate(taskStatus,$lowercase,$uppercase) = 'COMPLETE'">
								&lt;span style="color:green;"&gt;上传完成&lt;/span&gt;
							</xsl:when>
							<xsl:otherwise>
								&lt;span style="color:red;"&gt;上传中&lt;/span&gt;
							</xsl:otherwise>
						</xsl:choose>
					</xsl:element>
					<xsl:element name="cell"> 
						&lt;a  href="javascript:void(0)" style="color:#0B94A7;margin-left:10px;" onclick="DataManager.activeData('<xsl:value-of select="pkid" />');"&gt;查看&lt;/a&gt; |
						<xsl:if test="taskStatus != 'COMPLETE'">
							&lt;a  href="javascript:void(0)" style="color:#A40994;" onclick="DataManager.cancelData('<xsl:value-of select="pkid" />');"&gt;取消上传&lt;/a&gt;
						</xsl:if>
						<xsl:if test="taskStatus = 'COMPLETE'">
							&lt;a  href="javascript:void(0)" style="color:red;" onclick="DataManager.deleteData('<xsl:value-of select="pkid" />');"&gt;删除&lt;/a&gt;
						</xsl:if>
					</xsl:element>
				</xsl:element>
			</xsl:for-each>
		</xsl:element>
	</xsl:template>
<!--获取文件路径最后文件名  -->
<xsl:template name="get-filepath-name">   
  <xsl:param name="text"/>   
  <xsl:choose>   
    <xsl:when test="contains($text,'\')">   
      <xsl:call-template name="get-filepath-name">   
        <xsl:with-param name="text" select="substring-after($text,'\')"/>   
      </xsl:call-template>   
    </xsl:when>   
    <xsl:otherwise>   
      <xsl:value-of select="$text"/>   
    </xsl:otherwise>   
  </xsl:choose>   
</xsl:template>   
	
</xsl:stylesheet>
 



xml文件中的filePath在经过xsl处理后分别输出的是:f和test2

xsl返回带有template的html:

<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

<xsl:template match="/entry"> 
<html> 
<head> 
</head> 
<body> 
<xsl:value-of select="title" /> 
<xsl:value-of select="body" disable-output-escaping="yes"/> 

</body> 
</html> 
</xsl:template> 
</xsl:stylesheet>
 
xsl文件的标准模板:
match 属性的值是 XPath 表达式(举例,match="/" 定义整个文档,即把此模板与 XML 源文档的根相联系

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
 <html>
 <body>
    <p><xsl:value-of select="catalog/cd/title"/></p>
 </body>
 </html>
</xsl:template>

</xsl:stylesheet>
 


xsl结果过滤

通过在 <xsl:for-each> 元素中添加一个选择属性的判别式,我们也可以过滤从 XML 文件输出的结果。

<xsl:for-each select="catalog/cd[artist='Bob Dylan']">

合法的过滤运算符:

  • =  (等于)
  • != (不等于)
  • &lt; (小于)
  • &gt; (大于)

在何处放置排序信息

如需对结果进行排序,只要简单地在 XSL 文件中的 <xsl:for-each> 元素内部添加一个 <xsl:sort> 元素:

<xsl:for-each select="catalog/cd">
      <xsl:sort select="artist"/>
      <tr>
        <td><xsl:value-of select="title"/></td>
        <td><xsl:value-of select="artist"/></td>
      </tr>
      </xsl:for-each>


<script type="text/javascript">

// Load XML 
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("cdcatalog.xml")

// Load XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cdcatalog.xsl")

// Transform
document.write(xml.transformNode(xsl))

</script>
 
#子节点过滤:book有name子节点,且子节点值等于xdj
<xsl:value-of select="book[name='xdj']"></xsl:value-of>

#节点属性过滤:book有name属性,且属性值等于XDJ
<xsl:value-of select="book[@name='XDJ']"></xsl:value-of>

选取节点

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

下面列出了最有用的路径表达式:

表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式 结果
/bookstore/book[1] 选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()] 选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1] 选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3] 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang] 选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng'] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00] 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

实例

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式 结果
/bookstore/* 选取 bookstore 元素的所有子元素。
//* 选取文档中的所有元素。
//title[@*] 选取所有带有属性的 title 元素。

 

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式 结果
//book/title | //book/price 选取 book 元素的所有 title 和 price 元素。
//title | //price 选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

XPath 运算符

下面列出了可用在 XPath 表达式中的运算符:

运算符 描述 实例 返回值

| 计算两个节点集 //book | //cd 返回所有拥有 book 和 cd 元素的节点集

div 除法 8 div 4 =2

or price=9.80 or price=9.70

and price>9.00 and price<9.90

mod 计算除法的余数 5 mod 2=1


var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load("a.xml");

//price节点的个数
alert( xml.selectNodes("//price").length);//2
//第二个price节点的文本
alert( xml.selectNodes("//price")[1].text);//29.99
//author节点带有age属性的文本
alert( xml.selectNodes("//author[@age]")[0].text);//意大利人
//title节点存在lang属性,且lang属性=en
alert( xml.selectNodes("//title[@lang='en']")[0].text);//哈利波特
//book含有Test节点的title的文本
alert( xml.selectNodes("//book[Test]/title")[0].text);//哈利波特


xml数据:
<?xml version="1.0" encoding="GBK"?>
<bookstore>
	<book category="COOKING">
	  <title>意大利人</title>
	  <author age="34">达芬奇</author>
	  <year>2005</year>
	  <price>30.00</price>
	</book>
	<book category="CHILDREN">
	  <title lang="en">哈利波特</title>
	  <author>罗琳</author>
	  <year>2005</year>
	  <price>29.99</price>
	  <Test>测试内容</Test>
	</book>
</bookstore>
 

/*
* 将字符串转化成XMLDom对象 
* @param xmlStr xml字符串
*/
function createXmlDOM(xmlStr){
	var xmlDom = null;
	if (window.DOMParser){//FF,Chrome 等
		xmlDom=new DOMParser().parseFromString(xmlStr,"text/xml");
	 }else{//IE only
		xmlDom=new ActiveXObject("Microsoft.XMLDOM");
		xmlDom.async="false";
		xmlDom.loadXML(xmlStr);
	  }
	return xmlDom;
}
var xml = createXmlDOM("<?xml version=\"1.0\" encoding=\"UTF-8\"?><book><title>哈利波特</title></book>");
//原生态写法 IE,chrome,ff【推荐】
alert(xml.getElementsByTagName("title")[0].text);//哈利波特
alert("userName = " + xml.getElementsByTagName("title")[0].childNodes[0].nodeValue);//哈利波特
//IE only [不推荐]
//alert( xml.selectNodes("//book/title")[0].text);//哈利波特 IE only
 



说明:很多内容都是摘自w3school.com
end

xml中直接使用&符号:&amp;
例如:?name=tom&age=12 需要写成 ?name=tom&amp;age=12



愤怒的coder

分享到:
评论

相关推荐

    DocBook5安装文件

    1 docbook-xsl-ns-1.75.2.zip解压到D:\docbook ...2 环境变量Path中增加 D:\docbook\xsltproc\bin 3 新建一个bat,内容为:xsltproc -o book_cn.html D:\docbook\docbook-xsl-ns-1.75.2\html\docbook.xsl book_cn.xml

    els-sie-xsl-lib:一组XSL库

    提供一组功能(称为模板和变量)的库(例如els-common.xsl ):它们需要特定的名称空间前缀,因此可以将它们称为与其他任何XSLT的widthout冲突。 实现完全特定处理的库(例如cals2html.xsl ):它们需要特定的初始...

    xalanjava源码-xsl-tracer:用于跟踪XSL转换的服务

    在copy-of结果树时非常方便(在本例中,它是在变量中定义的 html 代码)。 调用栈:apply-template/call-template/apply-imports 调用栈 内部调用:模板的内部调用列表,无论出于何种原因都无法在文档中显示。 例如...

    javascript执行上下文、变量对象实例分析

    本文实例讲述了javascript执行上下文、变量对象。分享给大家供大家参考,具体如下: 突然看到一篇远在2010年的老文,作者以章节的形式向我们介绍了ECMA-262-3的部分内容,主要涉及到执行上下文、变量对象、作用域、...

    动易网站标签说明(电子书)

    属性 参数类型 默认值 可用值 变量值 参数说明 outputQty - 10 自定义值 - 输出的项目数量,如果开启分页,则此参数为分页大小值 parentId - 2 自定义值,支持数组 @RequestInt_Id 父栏目ID titleLength - 60 ...

    Pb_xml.zip_icecza_pb web_pb 6.5 安装使用_pb解析XML_xml

    cb_5和cb_6改变文件名变量ls_filename , ls_xslfilename ,以反映不同的目录上面使用 以下是运行时会发生什么变化的范例: 当您打开工作表, XML解析器: XML解析器 加载文件:在这里,您可以只加载一个...

    Java数据库编程宝典2

    15.3 使用具有XSL样式表的可更新ResultSet 15.4 小结 第16章 使用JDBC驱动的JavaMail API 16.1 使用电子邮件协议 16.1.1 MIME协议 16.1.2 SMTP协议 16.1.3 POP协议 16.2 使用JavaMail API 16.3 使用JDBC...

    Java数据库编程宝典4

    15.3 使用具有XSL样式表的可更新ResultSet 15.4 小结 第16章 使用JDBC驱动的JavaMail API 16.1 使用电子邮件协议 16.1.1 MIME协议 16.1.2 SMTP协议 16.1.3 POP协议 16.2 使用JavaMail API 16.3 使用JDBC...

    Java数据库编程宝典1

    15.3 使用具有XSL样式表的可更新ResultSet 15.4 小结 第16章 使用JDBC驱动的JavaMail API 16.1 使用电子邮件协议 16.1.1 MIME协议 16.1.2 SMTP协议 16.1.3 POP协议 16.2 使用JavaMail API 16.3 使用JDBC...

    Java数据库编程宝典3

    15.3 使用具有XSL样式表的可更新ResultSet 15.4 小结 第16章 使用JDBC驱动的JavaMail API 16.1 使用电子邮件协议 16.1.1 MIME协议 16.1.2 SMTP协议 16.1.3 POP协议 16.2 使用JavaMail API 16.3 使用JDBC...

    python写入已存在的excel数据实例

    python可以使用xlrd读excel,使用xlwt写excel,但是如果要把数据写入已存在的excel,需要另外一个库xlutils配合使用. 大概思路: 1、用xlrd.open_workbook打开已有的xsl文件 注意添加参数formatting_info=True,得以...

    xslt 中两个标准命名空间的区别

    在xsl程序调试的时候,会使用很多的属性。并且会自己定义一些变量。但是两个标准的命名空间支持的,元素和属性,以及对自定义变量的支持是不一致的。

    Python编程入门经典(中文)

    ◆介绍用于存储和操作数据的变量的概念 ◆讨论用于读写数据的文件和输入/输出 ◆总结常被忽视的python功能 ◆深入研究如何为模块和程序编写测试 ◆介绍如何使用python编写gui ◆着重介绍xml、html、xsl和相关技术 ◆...

    X3D-Editv3.1自明修改版2008

    另外,X3D-EDIT里面那几个XSL转换的样式文件路径还有些问题,暂时不能正 常使用。 注:这个软件虽然比较简单,但对我们学习X3D确实有莫大的帮助。它可以帮 我们了解整个X3D的应用体系,以及具体的使用方法,最...

    Python编程入门经典

    ◆介绍用于存储和操作数据的变量的概念, ◆讨论用于读写数据的文件和输入/输出, ◆总结常被忽视的python功能, ◆深入研究如何为模块和程序编写测试, ◆介绍如何使用python编写gui, ◆着重介绍xml、html、xsl和相关...

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    13.1.xsl 使用XSLT将XML转换为HTML 13.2.xml 一个雇员列表xml文件 13.2.xsl 一个XSL样式表的例子 13.3.htm Internet Explorer 浏览器中XML的应用 13.4.htm 直接对XML文档...

    Java语言基础下载

    强变量和弱变量 500 静态联编和动态联编 500 实例 500 内容总结 503 独立实践 504 第二十六章:JavaScript基础 505 学习目标 505 基本结构 506 JavaScript代码的加入 506 基本数据类型 506 常量 507 表达式和运算符 ...

Global site tag (gtag.js) - Google Analytics