XSLT2.0 xsl:key key()函数解析.

在XSLT中可以通过id()函数来定位节点.但存在一定的限制,比如对于ID类型的值不能是纯数字,同时其值必须是符合XML命名规则的.

对于此限制比如在特定的例子中会感觉很不方便,比如通过ISBN纯数字id值来定位图书,这种情况并不适用ID类型.

下面在以图书例子来讲解xsl:key 与 key()函数在XSLT中的应用.

XSLT Processor:Saxon9

command:java net.sf.saxon.Transform -xsl:books.xslt -s:books.xml -o:books.html

XML数据源:books.xml

<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<?xml-stylesheet href="books.xslt" type="text/xsl"?>
<!-- books information. -->
<books>
	<book>
		<isbn>9787302342717</isbn>
		<name>
			Beginning XML,5th Edition
		</name>
		<price>
			76.7RMB
		</price>
		<remark>
			XML-Book
		</remark>
	</book>
	<book>
		<isbn>9787512307483</isbn>
		<name>
			Java And XML
		</name>
		<price>
			55.8RMB
		</price>
		<remark>
			XML-Book
		</remark>
	</book>
	<book>
		<isbn>9787111376613</isbn>
		<name>
			JavaScript
		</name>
		<price>
			108.4RMB
		</price>
		<remark>
			JavaScript-Book
		</remark>
	</book>
	<book>
		<isbn>9787121266775</isbn>
		<name>
			High Performance JavaScript
		</name>
		<price>
			51.3RMB
		</price>
		<remark>
			JavaScript-Book
		</remark>
	</book>
</books>


XSLT文件:books.xslt

<?xml version="1.0" encoding="GB2312" standalone="yes"?>
<xsl:stylesheet version="2.0"
				xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output indent="yes"/>
	<xsl:strip-space elements="*"/>
	<xsl:preserve-space elements="books"/>
	<xsl:key name="isbn" match="book" use="normalize-space(isbn)"/>
	<xsl:key name="remark" match="book" use="normalize-space(remark)"/>
	<xsl:template match="/">
		<results>
			<result>
				<!-- 寻找isbn:9787111376613的书籍-->
				<xsl:copy-of select="key('isbn','9787111376613')"/>
			</result>
			<result>
				<!-- 寻找remark:XML-Book的书籍-->
				<xsl:copy-of select="key('remark','XML-Book')"/>
			</result>
		</results>
	</xsl:template>
</xsl:stylesheet>


Results:books.html

<?xml version="1.0" encoding="UTF-8"?>
<results>
   <result>
      <book>
         <isbn>9787111376613</isbn>
         <name>
			JavaScript
		</name>
         <price>
			108.4RMB
		</price>
         <remark>
			JavaScript-Book
		</remark>
      </book>
   </result>
   <result>
      <book>
         <isbn>9787302342717</isbn>
         <name>
			Beginning XML,5th Edition
		</name>
         <price>
			76.7RMB
		</price>
         <remark>
			XML-Book
		</remark>
      </book>
      <book>
         <isbn>9787512307483</isbn>
         <name>
			Java And XML
		</name>
         <price>
			55.8RMB
		</price>
         <remark>
			XML-Book
		</remark>
      </book>
   </result>
</results>


相对于采用id()函数来定位节点,key()会更加的自由和方便.并且也无需引入外部的DTD/Schema.

关于id()函数参考:XSLT 中id()函数理解._xslt30transformer 忽略dtd-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值