我的输入在xml
中如下abc(123)def(456)ghi(789)jkl(098)mno(765)
有人可以让我知道如何使用基于特定分隔符')'的xslt拆分about输入行,以便输出如下所示。 闭括号分隔符后应为';'
abc(123);def(456);ghi(789);jkl(098);mno(765)
由于
答案 0 :(得分:0)
因为它实际上看起来不像是分裂任何东西,所以另一个XSLT 2.0选项只是replace()
......
XML输入
<test>abc(123)def(456)ghi(789)jkl(098)mno(765)</test>
XSLT 2.0
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="test">
<xsl:copy>
<xsl:value-of select="replace(.,'\)',');')"/>
<!--
Instead of replace(), you could also use tokenize()/string-join():
<xsl:value-of select="string-join(tokenize(.,'\)'),');')"/>
or even tokenize() with the separator attribute:
<xsl:value-of select="tokenize(.,'\)')" separator=");"/>
-->
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<test>abc(123);def(456);ghi(789);jkl(098);mno(765);</test>
如果您需要使用XSLT 1.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:template match="test">
<xsl:copy>
<xsl:call-template name="addSeparator">
<xsl:with-param name="input" select="."/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
<xsl:template name="addSeparator">
<xsl:param name="sep" select="';'"/>
<xsl:param name="input"/>
<xsl:variable name="remaining" select="substring-after($input,')')"/>
<xsl:value-of select="concat(substring-before($input,')'),')',$sep)"/>
<xsl:if test="$remaining">
<xsl:call-template name="addSeparator">
<xsl:with-param name="input" select="$remaining"/>
<xsl:with-param name="sep" select="$sep"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>