您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息