我有两个变量 $word1 和 $word2 ,其值为:
$word1 = 'America'
$word2 = 'American'
现在使用XSLT
我必须比较两个变量,然后输出字符的差异。
例如,输出必须是“n”。我怎么能这样做XSLT 1.0
?
我发现了一个index-of-string
在 XSLT 2.0 中调用的函数!!
取决于您所说的“差异”到底是什么意思。要检查是否$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>
在您的示例中,此返回仍然为 'n',如果 `$word1 = 'merica' 等则返回 'An'。
请注意,如果两个字符串相同并且第二个字符串不包含在第一个字符串中,则此方法将返回一个空字符串。您可以在修改最后一个的第二种情况下修改此返回某种“特殊” otherwise
:
<xsl:otherwise>
<xsl:text>[SPECIAl STRING]</xsl:text>
</xsl:otherwise>