XSLT2.0 xsl:key key()函数解析.
2016-11-29 17:12
363 查看
在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()函数参考:http://blog.csdn.net/rickylin86/article/details/53386725
对于此限制比如在特定的例子中会感觉很不方便,比如通过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()函数参考:http://blog.csdn.net/rickylin86/article/details/53386725
相关文章推荐
- Google Maps API 2.0解析(18-GValidateKey进行api key验证的函数)
- XSLT2.0----<xsl:analyze-string>
- Google Maps API 2.0解析(7-GTicks和地图图片相关的函数)
- XPath 2.0, XQuery 1.0 和 XSLT 2.0 函数参考
- XSLT2.0 xsl:for-each-group用法详解.
- XSLT2.0----<xsl:variable>和<xsl:sequence>
- XSLT2.0 从外部读取信息并分析生成对应文件.采用xsl:for-each-group进行排序输出
- 基于XML-XSL的订单存储与拆分. xsl:function与xsl:result-document XSLT2.0
- Google Maps API 2.0解析(15-GXslt和GXmlHttp实现AJAX)
- selenium2.0关于python的常用函数(二) 定位元素,解析页面时用到
- 让XSLT直接解析出XML里的Html标签
- Flash Actionscript 2.0中的函数与事件 之 函数类(Function Class)
- 关于document.execCommand()函数可用参数大解析
- 函数调用约定解析
- 实例简析XPath串函数和XSLT(收藏)
- 关于document.execCommand()函数可用参数大解析
- 函数解析字符串(ZT)
- 一个解析Window控件Font属性到HTML的函数
- Turbo C 2.0 函数中文说明大全
- [导入]XSLT基本元素、函数