我有一个输入xml:
<Fees>
<Fee>
<Name>A</Name>
<Amt>10</Name>
</Fee>
<Fee>
<Name>B</Name>
<Amt>20</Name>
</Fee>
<Fee>
<Name>C</Name>
<Amt>30</Name>
</Fee>
<Fee>
<Name>D</Name>
<Amt>40</Name>
</Fee>
</Fees>
使用xslt:
<xsl:for-each select="Fees/Fee">
<xsl:value-of select="Name"/>
<xsl:text> : </xsl:text>
<xsl:value-of select="Fee"/>
</xsl:for-each>
使用简单的foreach打印名称时,我按顺序输出:
A : 10
B : 20
C : 30
D : 40
但我需要输出顺序如下:
C : 30
B : 20
D : 40
A : 10
此序列可能会以某些固定间隔发生变化。请建议如何从xslt完成它?如果我可以使用任何模板指定for-each中的任何序列,比如传递C,B,D,A或其他任何序列,那么它在生成输出时遵循相同的顺序?
答案 0 :(得分:0)
你可以这样做:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:param name="order" select="'C,B,D,A'"/>
<xsl:template match="/Fees">
<xsl:for-each select="Fee">
<xsl:sort select="string-length(substring-before(concat(',', $order, ','), concat(',', Name, ',')))" data-type="number" order="ascending"/>
<xsl:value-of select="Name"/>
<xsl:text> : </xsl:text>
<xsl:value-of select="Amt"/>
<xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
这允许您通过将不同的字符串作为order
参数传递来更改顺序。