`
accpxudajian
  • 浏览: 460055 次
  • 性别: 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

分享到:
评论

相关推荐

    在XSL使用数组例子

    然后使用`&lt;xsl:for-each&gt;`循环遍历这些变量,以执行数组操作。例如: ```xml &lt;xsl:variable name="array1" select="'element1'"/&gt; &lt;xsl:variable name="array2" select="'element2'"/&gt; &lt;xsl:variable name=...

    xsl使用示例代码

    而XSL(eXtensible Stylesheet Language)是用于转换XML文档格式的语言,它通过使用样式表来控制XML数据的呈现方式。XSLT(XSL Transformations)是XSL的一部分,专门用于转换XML文档。在本示例中,我们将深入探讨...

    XSL开发基础参考资料

    变量(`&lt;xsl:variable&gt;`)和参数(`&lt;xsl:param&gt;`),用于存储和传递值;以及输出元素(如`&lt;xsl:text&gt;`、`&lt;xsl:value-of&gt;`),用于插入文本或节点的值到输出文档中。理解并熟练使用这些元素,能帮助开发者构建出功能...

    使用xsl来动态生成java代码

    在示例中,可以看到如何使用XSL指令如`&lt;xsl:value-of&gt;`、`&lt;xsl:apply-templates&gt;`等来生成Java类的框架,包括类名、构造函数、私有变量及对应的setter方法。 3. **执行XSLT处理器**:最后,通过XSLT处理器(如Saxon...

    简单的xml与xsl实例

    3. **变量与函数**:XSL支持变量和函数的使用,可以存储和操作数据,执行复杂的计算和逻辑判断。 4. **流式处理**:XSLT允许流式处理,即一次处理XML文档的一部分,而不是整个文档,这对于处理大型XML文件非常有用。...

    跟我学XSL电子资源下载

    3. **XSL变量与参数**:介绍如何在XSL中声明和使用变量及参数,以实现更灵活的转换逻辑。 4. **XSL函数库**:讲解XSL内置函数的使用,如字符串处理、数值计算和节点操作等。 5. **XPath表达式**:详细解释XPath...

    jmeter-results-report.zip|jmeter-results-report_21.xsl

    4个jmeter测试报告模板集合 jmeter.results.shanhe.me.xsl jmeter.results.zyanycall.me.xsl jmeter-results-detail-report_30.xsl jmeter-results-report_21.xsl

    跟我学xsl.doc

    学习XSL不仅包括理解基本概念,还需要掌握如变量、函数、模板选择、流控制(如条件语句和循环)、以及如何导入和链接其他XSL样式表等高级特性。此外,熟悉XPath的语法和功能对于有效使用XSL至关重要,因为XPath是...

    jakarta-taglibs-xsl-1.0.1

    - `&lt;str:variables&gt;`:允许在XSL转换前设置变量,这些变量可以在XSLT模板中使用。 在实际应用中,Jakarta Taglibs XSL 1.0.1可以帮助开发者快速构建XML数据驱动的动态Web应用,减少后端代码的复杂性,提高代码的可...

    xsl学习

    在“xsl学习”这个主题中,我们主要关注如何使用XSL进行数据转换和呈现。 XML是一种标记语言,常用于存储和传输结构化数据。然而,XML文档本身并不规定如何显示这些数据,这就需要XSL来完成样式化和布局的工作。...

    XSL 中文教程大全

    总的来说,这个教程大全涵盖了XSLT的各个方面,包括基本概念、语法、实例、XPath使用和客户端实现,非常适合对XSL感兴趣的初学者系统学习。通过这些资源,你可以建立起对XSLT的深入理解和实践能力。

    xsl学习笔记,入门知识

    在实际应用中,你可能还会遇到条件判断(`&lt;xsl:if&gt;`和`&lt;xsl:choose&gt;`)、循环(`&lt;xsl:for-each&gt;`)、变量(`&lt;xsl:variable&gt;`和`&lt;xsl:param&gt;`)以及导入和包含其他样式表(`&lt;xsl:import&gt;`和`&lt;xsl:include&gt;`)等功能。...

    xsl与xml转化的实例

    在Web开发中,XML和XSL的结合使用对于数据交换、内容重用和跨平台兼容性至关重要。下面我们将深入探讨这两种技术以及它们如何协同工作。 **XML的基本概念** - **元素和属性**:XML文档由元素构成,元素可以通过属性...

    xml和xsl生成html页面

    此外,XSL还提供了更高级的功能,如条件语句(`&lt;xsl:if&gt;`)、循环(`&lt;xsl:for-each&gt;`)、模板调用(`&lt;xsl:call-template&gt;`)以及变量和函数,可以实现复杂的转换逻辑。通过熟练掌握XML和XSL,开发者能够创建出结构...

    XSL的PPT @ECNU

    3. **XSLT的语法**:介绍模板规则、选择符、模式匹配、变量和参数的使用,以及如何控制流结构(如if、for-each等)。 4. **XPath的详解**:讲解XPath表达式的构造,包括节点类型(元素、属性、文本等)、路径表达式...

    xsl、xml编程电子书和网页

    4. **XSL样式表结构**:包括导入、包含、模板、变量、模式和函数等概念。 5. **数据转换**:理解如何使用XSLT将XML数据转换为HTML,以供浏览器显示,或其他格式,如PDF。 6. **DOM(Document Object Model)**:XML...

    XSL 官方文档

    XSLT的核心概念包括模板、模式匹配、变量和参数、以及各种控制流指令,如`for-each`、`if`和`choose`。 XSL-FO(XSL-FO.doc)是XSL的一个部分,用于描述文档的呈现格式,如页面布局、字体、颜色和列表样式。它提供...

    XSL学习资料

    它包括了转换规则的定义、模板匹配、选择节点、变量和参数的使用等。XSLT的核心概念,如模板、模式匹配和流式处理,都在其中得到详尽解释。理解这些内容对于编写高效且可维护的XSLT样式表至关重要。 3. **XSLT标准...

    XSL学习3

    用户可以通过查阅此文件快速掌握XSL的关键概念,例如选择符、模板、变量、函数等。 2. **XSL学习.doc**:可能是作者编写的详细教程或笔记,涵盖XSL的高级特性,如XPath表达式、模式匹配、导入导出、命名空间、样式...

    docbook自定义xsl

    在实践中,我们需要对XSLT的工作原理有一定的了解,包括选择符(XPath)、模式匹配、模板规则和变量等概念。此外,熟悉XML和DocBook的语法规则是必不可少的,因为XSLT是基于XML的,并且直接操作XML文档的结构。 ...

Global site tag (gtag.js) - Google Analytics