我有一个像这样的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做到这一点?
答案 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(.)"/>