Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT排序元素没有';行不通_Xml_Sorting_Xslt - Fatal编程技术网

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"/>&amp;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。正如我在另一个问题中发布的那样,我使用键来选择唯一的元素值。所以我不得不使用键,但我也想对这些唯一的元素值进行排序。