我有两个变量$word1和$word2,它们的值是:
$word1 = 'America'
$word2 = 'American'
NOw使用XSLT
,我必须比较两个变量,然后输出字符中的差异。
例如,输出必须是"n"。如何在XSLT 1.0
中执行此操作??
我在XSLT2.0中找到了一个名为index-of-string
的函数!!
取决于"差异"的确切含义。要检查$word2
是否以$word1
开头并返回剩余部分,您只需执行以下操作:
substring-after($word2,$word1)
在您的示例中返回'n'。
如果您需要检查$word1
是否出现在$word2
中的任何位置,然后返回$word1
之前/之后的$word2
部分,则必须使用递归模板:
<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>