对 xsl:key key 使用两个元素

发布于 2024-09-11 03:20:16 字数 760 浏览 6 评论 0原文

我知道如果我有一个像这样的 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>

我可以在 XSL 文件中定义一个键,如下所示:

 <xsl:key name="preg" match="person" use="@id"/> 

我使用 id 作为键。然而,Donald 被列出了两次,但在 preg 中只出现了一个位置。

假设我想让他在 preg 中列出两次。也就是说,我想让类名成为标识符的一部分。基本上,我希望 preg 具有相当于有序对的键:(类名,id)。我该如何做到这一点(使用 XSLT 1.0)?

I know that if I have an XML file like this:

 <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>

I can define a key in an XSL file like this:

 <xsl:key name="preg" match="person" use="@id"/> 

where I'm using id as the key. However, Donald is listed twice, but is only in one place in preg.

Suppose I want him listed twice in preg. That is, I want to make the class name be part of the identifier. Basically, I want preg to have keys that are equivalent to ordered pairs: (class-name, id). How do I do that (using XSLT 1.0)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暗藏城府 2024-09-18 03:20:16

连接键? 怎么样?

use="concat(../@name, @id)"

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

use="concat(../@name, '|', @id)"

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

Concatenate the keys? How about

use="concat(../@name, @id)"

This would serve to keep them separate in the index. You'd of course have to use the same key to retrieve them. To avoid any ambiguity I'd also include a delimiter that won't occur in either subkey, as in

use="concat(../@name, '|', @id)"

This is the recommended approach in Michael Kay's XSLT2 reference.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文