【问题标题】:XSLT: Template to split strings based on a delimiterXSLT:基于分隔符拆分字符串的模板
【发布时间】:2016-10-30 01:35:23
【问题描述】:

我一直在尝试想出一个模板来改变这个:

<text>Smith, John / Smith, Dina / Smith, Susan</text>

进入:

<rec>
    <RecNo>1</RecNo>
    <name>Smith, John</name>
</rec>
<rec>
    <RecNo>2</RecNo>
    <name>Smith, Dina</name>
</rec>
<rec>
    <RecNo>3</RecNo>
    <name>Smith, Susan</name>
</rec>

我是 XSLT 的新手,我一直在努力想出一个模板来实现所需的结果。我已经尝试在这里修改模板How to split strings,但我无法实现我需要的。提前感谢您的帮助。

【问题讨论】:

    标签: xml xslt xslt-1.0


    【解决方案1】:

    使用此模板:

    <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output omit-xml-declaration="yes" indent="yes"/>
    
      <xsl:template match="text()" name="split">
        <xsl:param name="pText" select="."/>
        <xsl:param name="index" select="1"/>
        <xsl:if test="string-length($pText)">
          <rec>
            <RecNo>
              <xsl:value-of select="$index"/>
            </RecNo>
            <name>
              <xsl:value-of select="substring-before(concat($pText,'/'),'/')"/>
            </name>
          </rec>
          <xsl:call-template name="split">
            <xsl:with-param name="pText" select="substring-after($pText, '/')"/>
            <xsl:with-param name="index" select="$index + 1"/>
          </xsl:call-template>
        </xsl:if>
      </xsl:template>
    </xsl:stylesheet>
    

    【讨论】:

    • 非常感谢...稍作修改即可工作。
    • @ElmerCalonzo,没问题。干杯。