0

我在下面创建了这个 XSLT 模板来解析正在转换为 HTML 页面的文本块。该模板在多个位置使用,但是,它没有成功转换我一直指定的字符。一个例子如下:

我希望“二”有“帮助”,我继续多看“四”,但我发现的只是“空虚”。

结果是:我希望“两个”有“帮助”,我继续寻找“寻求”更多,但我发现的只是“空虚”。

有什么想法吗?

<xsl:template name="PreserveQuotations">
  <xsl:param name="text"/>
  <xsl:choose>
    <xsl:when test="contains($text,'&#8220;')">
      <xsl:value-of select="substring-before($text,'&#8220;')"/>
      <xsl:text>"</xsl:text>
      <xsl:call-template name="PreserveQuotations">
        <xsl:with-param name="text">
          <xsl:value-of select="substring-after($text,'&#8220;')"/>
        </xsl:with-param>
      </xsl:call-template>
    </xsl:when>
    <xsl:when test="contains($text,'&#8221;')">
      <xsl:value-of select="substring-before($text,'&#8221;')"/>
      <xsl:text>"</xsl:text>
      <xsl:call-template name="PreserveQuotations">
        <xsl:with-param name="text">
          <xsl:value-of select="substring-after($text,'&#8221;')"/>
        </xsl:with-param>
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$text"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>
4

1 回答 1

0

如果您考虑以下形式的字符串的情况,您应该会清楚这个问题

aaa &#8221; bbb &#8220; ccc

有两个明显的解决方案:(1)检查字符串包含两个特殊字符的情况,然后处理第一个出现的情况;或 (2) 对每个字符的字符串进行一次传递。(要么将模板拆分为两个模板,要么指定在参数中查找哪个字符。)

于 2012-12-21T16:45:31.747 回答