如何按照与我的数据类型下拉列表相同的顺序对XSLT中的列表进行排序?
我尝试了以下内容但没有取得任何成功:
<xsl:variable name="tarrifs" select="umbraco.library:GetPreValues(1601)//preValue" />
<xsl:sort select="tarrifs" order="descending" />
我的数据类型“关税类别”中有一个选项列表,我想按照与我的数据类型相同的顺序在我的XSLT中订购列表。
我的数据类型顺序:
UE资费标准
UE定价提案
UE资费时间表
UE其他费用
UE资费策略报告
MG关税表
MG关税报告
MG辅助和其他费用
答案 0 :(得分:0)
首先,<xsl:sort...
必须出现在<xsl:apply-templates...
或<xsl:for-each...
标记内。
要按照您的需要进行主观逻辑排序,您可以采取几种方法。最简单的可能就是:
<强> XML 强>
<root>
<item>dog</item>
<item>cat</item>
<item>horse</item>
<item>dragonfly</item>
</root>
<强> XSL 强>
<!-- this sheet vars -->
<xsl:variable name='sort_order' select='"dragonfly|horse|dog|cat"' />
<!-- root and static content -->
<xsl:template match="/">
<xsl:apply-templates select='root/item'>
<xsl:sort select='string-length(substring-before($sort_order, current()/text()))' data-type='number' />
</xsl:apply-templates>
</xsl:template>
<!-- iteration content - animal -->
<xsl:template match='item'>
<p><xsl:value-of select='.' /></p>
</xsl:template>
您可以在this XMLPlayground session进行测试。
您可能会看到,概念是将所需的排序顺序声明为字符串,然后根据每个节点在该排序字符串中的文本值的位置对我们的节点进行迭代排序。
答案 1 :(得分:0)
你在寻找这样的东西: -
假设你的xml是这样的: -
<preValues>
<preValue id="19">Value 1</preValue>
<preValue id="20">Value 2</preValue>
<preValue id="21">Value 3</preValue>
</preValues>
如果您想按id
顺序按descending
排序,请按照这种方式进行排序
<xsl:for-each select="umbraco.library:GetPreValues(1601)//preValue">
<xsl:sort select="@id" order="descending" />
<!-- Do Your Stuff -->
</xsl:for-each>
按照相同的方法,按多个属性值排序。