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)" οnclick="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)" οnclick="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;" οnclick="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;" οnclick="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;" οnclick="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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值