使用xsl:key键的两个元素

Pau*_*ers 3 xslt xslkey

我知道如果我有这样的XML文件:

 <persons>
   <class name="English">
        <person name="Tarzan" id="050676"/>
        <person name="Donald" id="070754"/>
        <person name="Dolly" id="231256"/>
   </class>
   <class name="Math">
        <person name="Winston" id="050677"/>
        <person name="Donald"  id="070754"/>
        <person name="Fred"    id="231257"/>
   </class>
 </persons>
Run Code Online (Sandbox Code Playgroud)

我可以像这样在XSL文件中定义一个键:

 <xsl:key name="preg" match="person" use="@id"/> 
Run Code Online (Sandbox Code Playgroud)

我在哪里使用id作为密钥.然而,唐纳德被列入两次,但只是在preg的一个地方.

假设我希望他在preg中列出两次.也就是说,我想让类名成为标识符的一部分.基本上,我希望preg具有等价于有序对的键:( class-name,id).我该怎么做(使用XSLT 1.0)?

Jim*_*son 6

连接密钥?怎么样

use="concat(../@name, @id)"
Run Code Online (Sandbox Code Playgroud)

这将使它们在索引中分开.您当然必须使用相同的密钥来检索它们.为了避免任何歧义,我还要包含一个不会出现在任何一个子键中的分隔符,如

use="concat(../@name, '|', @id)"
Run Code Online (Sandbox Code Playgroud)

这是Michael Kay的XSLT2参考中推荐的方法.