我有两个变量$ word1和$ word2,值为:
$word1 = 'America'
$word2 = 'American'
否则使用XSLT
我必须比较两个变量,然后输出角色的差异。
例如,输出必须为'n'。我怎么能在XSLT 1.0
??
我在XSLT 2.0中找到了一个名为index-of-string
的函数!!
答案 0 :(得分:1)
取决于你的意思究竟是什么'差异'。要检查$word2
是否以$word1
开头并返回剩余部分,您只需执行以下操作:
substring-after($word2,$word1)
返回' n'在你的例子中。
如果您需要检查$word1
内是否显示$word2
- 然后在$word2
之前/之后返回$word1
的部分,则必须使用递归模板:
<xsl:template name="substring-before-after">
<xsl:param name="prefix"/>
<xsl:param name="str1"/>
<xsl:param name="str2"/>
<xsl:choose>
<xsl:when test="string-length($str1)>=string-length($str2)">
<xsl:choose>
<xsl:when test="substring($str1,1,string-length($str2))=$str2">
<xsl:value-of select="concat($prefix,substring($str1,string-length($str2)+1))"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="substring-before-after">
<xsl:with-param name="prefix" select="concat($prefix,substring($str1,1,1))"/>
<xsl:with-param name="str1" select="substring($str1,2)"/>
<xsl:with-param name="str2" select="$str2"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:text></xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
你这样称呼:
<xsl:call-template name="substring-before-after">
<xsl:with-param name="prefix" select="''"/>
<xsl:with-param name="str1" select="$word2"/>
<xsl:with-param name="str2" select="$word1"/>
</xsl:call-template>
此回归仍然是&#39; n&#39;在你的例子中,并返回&#39; An&#39;如果`$ word1 =&#39; merica&#39;等。
请注意,如果两个字符串相同并且第二个字符串未包含在第一个字符串中,则此方法返回空字符串。你可以修改这个返回某种特殊的&#39;在第二种情况下修改最后otherwise
:
<xsl:otherwise>
<xsl:text>[SPECIAl STRING]</xsl:text>
</xsl:otherwise>