如何在xslt 1.0中切割动态字符串



我有一个这样结构的变量:var= a—B—C—D(它可以包含或多或少的分隔符"—")就像var=A—B—C—D—E—F—G……等等)。

如何在xsl中轻松地将变量var动态地转换为几个变量,例如:Var1 = a;VARnew2 = B;VARnew3 = C;

我见过类似于"substring-before"我觉得我需要使用一个递归模板,但我不设法理解我怎么能做到这一点…或者也许有比"substring-before"更好的函数;哪一种适合我?

有人能帮我吗?这将是非常感激!谢谢你

因为只能使用XSLT-1.0,所以可以尝试递归:

这是一个示例XML:

<?xml version="1.0" ?>
<root>
<exampleString>A--B--C--D</exampleString>
<exampleString>   --A--B--C--D</exampleString>
<exampleString>A--B--C   --D--E--F--G</exampleString>    
<exampleString>A--B--C--D--E--     </exampleString>
</root>

这是一个可能的XSLT-1.0解决方案:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/root/exampleString">
<xsl:call-template name="delimit">
<xsl:with-param name="str" select="." />
</xsl:call-template>
</xsl:template>
<xsl:template name="delimit">
<xsl:param name="str" />
<xsl:choose>
<xsl:when test="substring-before($str,'--')">
<xsl:if test="normalize-space(substring-before($str,'--'))">
<var><xsl:value-of select="normalize-space(substring-before($str,'--'))" /></var>
</xsl:if>
<xsl:call-template name="delimit">
<xsl:with-param name="str" select="substring-after($str,'--')" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:if test="normalize-space($str)">
<var><xsl:value-of select="$str" /></var>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>

输出为

<var>A</var><var>B</var><var>C</var><var>D</var>
<var>A</var><var>B</var><var>C</var><var>D</var>
<var>A</var><var>B</var><var>C</var><var>D</var><var>E</var><var>F</var><var>G</var>    
<var>A</var><var>B</var><var>C</var><var>D</var><var>E</var>

当然你可以用换行符分隔<var>元素。

最新更新