XSLT - 使用特定字符拆分字符串

时间:2016-11-08 09:24:03

标签: xml xslt

我有一个像这样的xml,

<doc>
    <para>A brief 23 spell* of hea#vy rain* forc^%ed an early+ lunch* 98@with nine</para>
</doc>

我需要打破文本中每个*的文本字符串..

预期的输出应该是,

<doc>
    <para>A brief 23 spell</para>
    <para>of hea#vy rain</para>
    <para>forc^%ed an early+ lunch</para>
    <para>98@with nine</para>
</doc>

我已经按照逻辑写了

我为此写了以下xslt,

<xsl:template match="para"> 
        <xsl:analyze-string select="text()" regex="[A-Za-z0-9_.]\*">
            <xsl:matching-substring>
                <para>
                    <xsl:value-of select="."/>
                </para>
            </xsl:matching-substring>
        </xsl:analyze-string>
    </xsl:template>

任何人都可以建议我如何使用xslt做到这一点?

1 个答案:

答案 0 :(得分:1)

个人偏好我会选择功能 tokenize()

  

总结:此函数将$ input字符串分解为一系列字符串,将与$ pattern匹配的任何子字符串视为分隔符。分隔符本身不会返回。

<xsl:template match="para"> 
  <xsl:for-each select="tokenize(.,'\*')">
    <para>
      <xsl:sequence select="."/>
    </para>
  </xsl:for-each>
</xsl:template>

结果:

<para>A brief 23 spell</para>
<para> of hea#vy rain</para>
<para> forc^%ed an early+ lunch</para>
<para> 98@with nine</para>

剥离,前导和尾随空格使用:

<xsl:sequence select="normalize-space(.)"/>