gpt4 book ai didi

xslt - XSL 1.0 - 从不同列表中排序列表

转载 作者:行者123 更新时间:2023-12-02 03:56:53 25 4
gpt4 key购买 nike

我是 XSL 的新手,并尝试查看此处的所有示例,但没有一个符合我的问题。

我有一个电影排序列表(从左到右排序)

<movies>movieF,movieC,movieG</movies>

现在我想采用那个排序顺序列表并在我这个巨大的电影列表之上排序

<moviesList>
<movie>movieA</movie>
<movie>movieB</movie>
<movie>movieC</movie>
<movie>movieD</movie>
<movie>movieE</movie>
<movie>movieF</movie>
<movie>movieG</movie>
<movie>movieH</movie>
</moviesList>

我想要的结果:

<moviesList>
<movie>movieF</movie>
<movie>movieC</movie>
<movie>movieG</movie>
<movie>movieA</movie>
<movie>movieB</movie>
<movie>movieD</movie>
<movie>movieE</movie>
<movie>movieH</movie>
</moviesList>

请有人给我一些指导如何实现这样的事情。我试图创建一个变量 $sortlist,然后在周围添加定界字符,然后在排序时使用 substring-before 技巧。结果是我的排序列表确实出现在其余电影之前的顶部,但它的顺序不正确。请帮忙。

最佳答案

试试这个:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="sortlist" select="';movieF;movieC;movieG;'"/>

<xsl:template match="moviesList">
<xsl:copy>
<xsl:for-each select="*[contains($sortlist, concat(';',.,';'))]">
<xsl:sort select="substring-before($sortlist,concat(';',.,';'))" />
<xsl:copy-of select="."/>
</xsl:for-each>
<xsl:copy-of select="*[not(contains($sortlist, concat(';',.,';')))]"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

注意,我没有使用 string-length 进行排序,我只是使用了字符串本身。 XSLT1.0 可以按字母顺序而不是数字排序,这会将 14 放在 7 之上,从而产生顺序 movieF、movieG、movieC。

它实际上使用电影名称列表中每个电影名称之前的部分作为排序键;按字母顺序,;movieF; 出现在 ;movieF;movieC; 之前,因此它将把 movieC 放在 movieG 之上排序时。

我个人倾向于避免使用逗号作为分隔符,因为它们可以用在某些名称中,例如“卧虎藏龙”。分号的可能性要小得多,但您可以使用您喜欢的任何字符,只要它不是出现在电影名称中的字符即可。

关于xslt - XSL 1.0 - 从不同列表中排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com