我有一个这样结构的变量: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>
元素。