XSLT将分号从分号更改为逗号,并按字母顺序对值进行排序

时间:2017-06-19 20:52:45

标签: xslt

如何将分隔符从分号更改为逗号并在XSLT中按字母顺序对值进行排序?请指教。

现有代码

<component>
    <rate>T;P;C;X;R</rate>
</component>

预期代码

<component>
    <rate>C,P,R,T,X</rate>
</component>

2 个答案:

答案 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>