基于奇数和偶数的XSLT转换

时间:2017-01-26 19:04:25

标签: xslt

我想通过XSLT将以逗号分隔列表转换为基于奇数和偶数位置的输出。

输入 -

field1,value1,field2,value2,field3,value3

输出 -

<root>
<field1>value1</field1>
<field2>value2</field2>
<field3>value3</field3>
</root>

提前致谢。

此致 Nilay

1 个答案:

答案 0 :(得分:0)

您可以使用递归模板调用而不使用扩展函数...

XSLT 1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:param name="input" select="'field1,value1,field2,value2,field3,value3'"/>

  <xsl:template match="/">
    <root>
      <xsl:call-template name="process">
        <xsl:with-param name="toProcess" select="$input"/>
      </xsl:call-template>
    </root>
  </xsl:template>

  <xsl:template name="process">
    <xsl:param name="toProcess"/>
    <xsl:variable name="name" select="normalize-space(substring-before($toProcess,','))"/>
    <xsl:variable name="value" select="normalize-space(substring-before(
      concat(substring-after($toProcess,','),',')
      ,','))"/>
    <xsl:variable name="remaining" select="substring-after(
      substring-after($toProcess,',')
      ,',')"/>
    <xsl:element name="{$name}">
      <xsl:value-of select="$value"/>
    </xsl:element>
    <xsl:if test="string($remaining)">
      <xsl:call-template name="process">
        <xsl:with-param name="toProcess" select="$remaining"/>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>

输出(使用任何格式良好的XML输入。)

<root>
   <field1>value1</field1>
   <field2>value2</field2>
   <field3>value3</field3>
</root>