Xml XSLT排序元素没有';行不通
我正在尝试对列表中显示的所有演员姓名进行排序。一定有一些简单的东西我错过了,但我就是不知道它是什么Xml XSLT排序元素没有';行不通,xml,sorting,xslt,Xml,Sorting,Xslt,我正在尝试对列表中显示的所有演员姓名进行排序。一定有一些简单的东西我错过了,但我就是不知道它是什么 <xsl:key name="kName" match="actor/name" use="." /> <xsl:template match="/"> <xsl:element name="html"> <xsl:element name="head"> <xsl:elemen
<xsl:key name="kName" match="actor/name" use="." />
<xsl:template match="/">
<xsl:element name="html">
<xsl:element name="head">
<xsl:element name="title">
<xsl:text>Actors list</xsl:text>
</xsl:element>
<xsl:element name="h2">Actors list</xsl:element>
</xsl:element>
<xsl:element name="body">
<xsl:variable name="actorNames" select="/movies/movie/cast/actors/actor/name"/>
<xsl:apply-templates select="$actorNames[generate-id() = generate-id(key('kName', .)[1])]">
<xsl:sort select="./name"/>
</xsl:apply-templates>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="name">
<xsl:element name="a">
<xsl:attribute name="href">actor_details.php?movieID=<xsl:value-of select="../../../../@movieID"/>&actorID=<xsl:value-of select="../@actorID"/></xsl:attribute>
<xsl:value-of select="." />
</xsl:element>
<xsl:element name="br" />
</xsl:template>
演员名单
演员名单
actor_details.php?movieID=&;阿克托里德=
排序不需要xsl:key,可以直接在应用模板中应用
这项工作:
<xsl:key name="kName" match="actor/name" use="." />
<xsl:template match="/">
<xsl:element name="html">
<xsl:element name="head">
<xsl:element name="title">
<xsl:text>Actors list</xsl:text>
</xsl:element>
<xsl:element name="h2">Actors list</xsl:element>
</xsl:element>
<xsl:element name="body">
<!-- your way -->
<xsl:variable name="actorNames" select="/movies/movie/cast/actors/actor/name"/>
<xsl:apply-templates select="$actorNames[generate-id() = generate-id(key('kName', .)[1])]">
<xsl:sort select="."/>
</xsl:apply-templates>
<!-- my way -->
<xsl:apply-templates select="movies/movie/cast/actors/actor">
<xsl:sort select="./name"/>
</xsl:apply-templates>
</xsl:element>
</xsl:element>
</xsl:template>
演员名单
演员名单
排序不需要xsl:key,可以直接在应用模板中应用
这项工作:
<xsl:key name="kName" match="actor/name" use="." />
<xsl:template match="/">
<xsl:element name="html">
<xsl:element name="head">
<xsl:element name="title">
<xsl:text>Actors list</xsl:text>
</xsl:element>
<xsl:element name="h2">Actors list</xsl:element>
</xsl:element>
<xsl:element name="body">
<!-- your way -->
<xsl:variable name="actorNames" select="/movies/movie/cast/actors/actor/name"/>
<xsl:apply-templates select="$actorNames[generate-id() = generate-id(key('kName', .)[1])]">
<xsl:sort select="."/>
</xsl:apply-templates>
<!-- my way -->
<xsl:apply-templates select="movies/movie/cast/actors/actor">
<xsl:sort select="./name"/>
</xsl:apply-templates>
</xsl:element>
</xsl:element>
</xsl:template>
演员名单
演员名单
你实际上做错了这件事。应用模板正在选择名称元素。您的xsl:sort键是./name,它是相对于被排序的节点计算的。由于name元素没有name子元素,因此没有选择任何内容
但正如雷内所指出的,你使用钥匙也是完全没有必要的。你实际上做错的就是这个。应用模板正在选择名称元素。您的xsl:sort键是./name,它是相对于被排序的节点计算的。由于name元素没有name子元素,因此没有选择任何内容
但正如雷内所指出的,您使用钥匙也是完全没有必要的。谢谢您的回复,雷内。但在我的特殊情况下,我将如何应用它,因为我使用的是“apply templates select=“$actorNames[generate-id()=generate id(key('kName',)[1])”" ? 我已经用你的解决方案更新了我的帖子,但由于某些原因它仍然不起作用。我还为你的实现方式添加了一个选项。谢谢你的回复,雷内。但在我的特殊情况下,我将如何应用它,因为我使用的是“apply templates select=“$actorNames[generate-id()=generate id(key('kName',)[1])”" ? 我已经用你的解决方案更新了我的帖子,但出于某些原因,它仍然不起作用。我还为你的实现方式添加了一个选项。谢谢你澄清这一点,Michael。正如我在另一个问题中发布的那样,我使用键来选择唯一的元素值。所以我不得不使用键,但我也想对这些独特的元素值进行排序。谢谢你澄清这一点,Michael。正如我在另一个问题中发布的那样,我使用键来选择唯一的元素值。所以我不得不使用键,但我也想对这些唯一的元素值进行排序。