XSLT中Key的使用
相信用过XSLT开发的朋友都一定使用过Key, 在XSLT中,Key提供了一种快速地位XML元素的方法,其效率比起常规的XPath定位有着极大的提升。为了帮助大家理解它的使用,我们举例说明。
首先,假设我们有以下的XML源文档:
<?xml version="1.0"?>
<Students>
<Student ID="1">
<Name>Tom</Name>
<Age>28</Age>
</Student>
<Student ID="2">
<Name>Lisa</Name>
<Age>30</Age>
</Student>
<Student ID="3">
<Name>John</Name>
<Age>27</Age>
</Student>
<Student ID="4">
<Name>Lucy</Name>
<Age>35</Age>
</Student>
<Student ID="5">
<Name>Lily</Name>
<Age>21</Age>
</Student>
</Students>
这是一个很简单的学生信息。正如大家所熟知的,如果我们想根据某个学生的ID得到这个学生的Name,那么我们可以很轻易地用XPath去查询如下:
/Students/Student[@ID=3]/Name
读者可以尝试,如果这个XML很大,即有上万个甚至更多的学生信息,那么使用以上的XPath查询会相当慢。此时,我们引入Key。
要使用Key,我们首先定义一个Key的element如下:
<xsl:key name="StudentByID" match="/Students/Student" use="@ID" />
我们可以看到,首先,我们给出key的名字(这个名字会在后面调用的时候使用),match给出我们要引用的XPath,而且use则代表传入的参数。用一个比较通俗的话来说: 我们定义了一个名叫StudengByID的key,那么如果传入一个ID给这个key,那么这个key就可以找到该ID的Student节点。Understand?:-)
定义好了之后,我们就可以在XSLT template中使用如下:
<xsl:value-of select="key('StudentByID', 3)/Name"/>
这跟我们刚刚使用XPath得到的结果一样,believe it or not, 使用key会比XPath快很多倍,尤其是当XML源数据量很大的时候。
后续我还会推出一些XSLT的高级应用,今天就写到这里,上班了。。。。:-)