如何按时间降序列出,xsl?

时间:2016-04-03 09:32:51

标签: xml xslt

我必须使用XSLT列出XML文档中描述的所有配方,并且该列表必须按准备时间按降序包含配方。具有相同准备时间的食谱必须按烹饪时间的降序列出。我不知道怎么做最后一部分,我甚至不确定第一部分。这是我到现在为止所拥有的:

<recipes>
    <recipe>
        <lunch>
            <preparationTime>00:10</preparationTime>
            <cookingTime>00:30</cookingTime>
            <ingredients>
                <ing1>Honey</ing1>
                <ing2>Avocado</ing2>
                <ing3>Chicken breast</ing3>
                <ing4>Tomatoes</ing4>
            </ingredients>
            <preparationSteps>
                <step1>Proin consectetur ligula eget magna placerat luctus</step1>
                <step2>Donec eu sem at justo imperdiet tempor</step2>
                <step3>Curabitur vitae ipsum rutrum, facilisis velit tincidunt, rhoncus turpis</step3>
                <step4>Etiam maximus malesuada feugiat</step4>
            </preparationSteps>
        </lunch>
    </recipe> 

    <recipe>
        <desert>
            <preparationTime>00:23</preparationTime>
            <cookingTime>01:00</cookingTime>
            <ingredients>
                <ing1>Kiwi</ing1>
                <ing2>Avocado</ing2>
                <ing3>Apple</ing3>
                <ing4>Honey</ing4>
            </ingredients>
            <preparationSteps>
                <step1>Proin consectetur ligula eget magna placerat luctus</step1>
                <step2>Praesent volutpat orci non nunc eleifend tincidunt</step2>
                <step3>Morbi at est ac ligula ornare condimentum</step3>
                <step4>Jaher maximus malesuada feugiat</step4>
            </preparationSteps>
        </desert>
    </recipe>

    <recipe>
        <diet>
            <preparationTime>00:07</preparationTime>
            <cookingTime>00:00</cookingTime>
            <ingredients>
                <ing1>Water</ing1>
                <ing2>Lemon</ing2>
                <ing3>Apple</ing3>
                <ing4>Tomato</ing4>
            </ingredients>
            <preparationSteps>
                <step1>Class aptent taciti sociosqu ad litora torquent per conubia nostras</step1>
                <step2> Quisque id pretium eros</step2>
                <step3>Pellentesque elit velit, feugiat vel rhoncus</step3>
                <step4>Vee milori malesuada feugiat</step4>
            </preparationSteps>
        </diet>
    </recipe>

    <recipe>
        <dinner>
            <preparationTime>00:18</preparationTime>
            <cookingTime>00:11</cookingTime>
            <ingredients>
                <ing1>Fish</ing1>
                <ing2>Lemon</ing2>
                <ing3>Honey</ing3>
                <ing4>Salt</ing4>
            </ingredients>
            <preparationSteps>
                <step1>Donec eu sem at justo imperdiet tempor</step1>
                <step2>Nurcas non tellus eu magna dictum hendrerit</step2>
                <step3>Morbi at est ac ligula ornare condimentum</step3>
                <step4>Derbis maximus malesuada feugiat</step4>
            </preparationSteps>
        </dinner>
    </recipe> 

</recipes>

和xsl:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<html>
    <body>
        <h2>Recipes</h2>
        <xsl:for-each select="recipes/recipe">
        <ul>
            <li><xsl:value-of select="lunch"></li>
                <li><xsl:value-of select="preparationTime"></li>
                <li><xsl:value-of select="cookingTime"></li>
                <ul><xsl:value-of select="ingredients">
                    <li><xsl:value-of select="ing1"></li>
                    <li><xsl:value-of select="ing2"></li>
                    <li><xsl:value-of select="ing3"></li>
                    <li><xsl:value-of select="ing4"></li>
                </ul>
                <ol><xsl:value-of select="preparationSteps">
                    <li><xsl:value-of select="step1"></li>
                    <li><xsl:value-of select="step2"></li>
                    <li><xsl:value-of select="step3"></li>
                    <li><xsl:value-of select="step4"></li>
                </ol>


            <li><xsl:value-of select="desert"></li>
                <li><xsl:value-of select="preparationTime"></li>
                <li><xsl:value-of select="cookingTime"></li>
                <ul><xsl:value-of select="ingredients">
                    <li><xsl:value-of select="ing1"></li>
                    <li><xsl:value-of select="ing2"></li>
                    <li><xsl:value-of select="ing3"></li>
                    <li><xsl:value-of select="ing4"></li>
                </ul>
                <ol><xsl:value-of select="preparationSteps">
                    <li><xsl:value-of select="step1"></li>
                    <li><xsl:value-of select="step2"></li>
                    <li><xsl:value-of select="step3"></li>
                    <li><xsl:value-of select="step4"></li>
                </ol>


            <li><xsl:value-of select="diet"></li>
                <li><xsl:value-of select="preparationTime"></li>
                <li><xsl:value-of select="cookingTime"></li>
                <ul><xsl:value-of select="ingredients">
                    <li><xsl:value-of select="ing1"></li>
                    <li><xsl:value-of select="ing2"></li>
                    <li><xsl:value-of select="ing3"></li>
                    <li><xsl:value-of select="ing4"></li>
                </ul>
                <ol><xsl:value-of select="preparationSteps">
                    <li><xsl:value-of select="step1"></li>
                    <li><xsl:value-of select="step2"></li>
                    <li><xsl:value-of select="step3"></li>
                    <li><xsl:value-of select="step4"></li>
                </ol>


            <li><xsl:value-of select="dinner"></li>
                <li><xsl:value-of select="preparationTime"></li>
                <li><xsl:value-of select="cookingTime"></li>
                <ul><xsl:value-of select="ingredients">
                    <li><xsl:value-of select="ing1"></li>
                    <li><xsl:value-of select="ing2"></li>
                    <li><xsl:value-of select="ing3"></li>
                    <li><xsl:value-of select="ing4"></li>
                </ul>
                <ol><xsl:value-of select="preparationSteps">
                    <li><xsl:value-of select="step1"></li>
                    <li><xsl:value-of select="step2"></li>
                    <li><xsl:value-of select="step3"></li>
                    <li><xsl:value-of select="step4"></li>
                </ol>
        </ul>

        <!--
        <xsl:sort select="substring-before(substring-after(normalize-space(NoteEnteredOn), ,' '),':') mod 12" 
          order="descending" data-type="number" /> 
        <xsl:sort select="substring-before(substring-after(normalize-space(NoteEnteredOn),':'), ' ')" 
          order="descending" data-type="number" /> -->
    </body>
</html>

</xsl:template>
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:0)

您的可完美排序为&#34; string&#34;。因此,您需要将以下xslt:sort添加到links = [record['link'] for record in reader if record['link']]

for-each

但是你的xslt存在一些其他问题:

  • 您的xslt无效。
  • 在每个食谱中只有午餐,沙漠等的一个条目。但是你尝试为每个食谱选择所有食谱。

<xsl:sort select="*/preparationTime" order="descending" /> <xsl:sort select="*/cookingTime" order="descending" /> 可能如下所示:

for-each