如何将分隔符从分号更改为逗号并在XSLT中按字母顺序对值进行排序?请指教。
现有代码
<component>
<rate>T;P;C;X;R</rate>
</component>
预期代码
<component>
<rate>C,P,R,T,X</rate>
</component>
答案 0 :(得分:1)
更改分隔符的部分很简单:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/component">
<component>
<rate>
<xsl:value-of select="translate(rate, ';', ',')"/>
</rate>
</component>
</xsl:template>
</xsl:stylesheet>
但是,对于排序部分,它更具挑战性......
答案 1 :(得分:0)
如果您可以使用XSLT 3.0,则可以使用tokenize()
,string-join()
和sort()
...
<xsl:template match="rate">
<xsl:copy>
<xsl:value-of select="string-join(sort(tokenize(normalize-space(),';')),',')"/>
</xsl:copy>
</xsl:template>
如果您可以使用XSLT 2.0,则可以使用tokenize()
和string-join()
,但是您必须使用xsl:sort
(或xsl:perform-sort
)来执行排序...
<xsl:template match="rate">
<xsl:variable name="rates" as="item()*">
<xsl:for-each select="tokenize(normalize-space(),';')">
<xsl:sort data-type="text"/>
<xsl:value-of select="."/>
</xsl:for-each>
</xsl:variable>
<xsl:copy>
<xsl:value-of select="string-join($rates,',')"/>
</xsl:copy>
</xsl:template>