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的高级应用,今天就写到这里,上班了。。。。:-)

posted on 2010-07-12 14:47  TomXie  阅读(509)  评论(1编辑  收藏  举报

导航