输出字符XSLT的差异



我有两个变量$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>

相关内容

  • 没有找到相关文章

最新更新