1

我有两个变量 $word1 和 $word2 ,其值为:

$word1 = 'America'
$word2 = 'American'

现在使用XSLT我必须比较两个变量,然后输出字符的差异。

例如,输出必须是“n”。我怎么能这样做XSLT 1.0

我发现了一个index-of-string在 XSLT 2.0 中调用的函数!!

4

1 回答 1

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>

在您的示例中,此返回仍然为 'n',如果 `$word1 = 'merica' 等则返回 'An'。

请注意,如果两个字符串相同并且第二个字符串不包含在第一个字符串中,则此方法将返回一个空字符串。您可以在修改最后一个的第二种情况下修改此返回某种“特殊” otherwise

     <xsl:otherwise>
      <xsl:text>[SPECIAl STRING]</xsl:text>
    </xsl:otherwise>
于 2013-08-07T14:38:14.363 回答