如何在执行<xsl:copy-of select =“./*”> </xsl:copy-of>时制作大写字母

时间:2012-03-28 05:54:18

标签: xslt xslt-1.0 xslt-2.0

我必须在复制整个部分时使父节点内的所有节点值都大写。

例如:     ATPM / 37 zATP - 杂项例外空白文本框没有数字1表示 改成:     ATPM / 37 ZATP - MISCELLANEOUS EXCEPTIONS BLANK TEXT BOX没有#1 SAID

2 个答案:

答案 0 :(得分:1)

在XSLT 2.0中,尝试添加

<xsl:template match="text()">
<xsl:value-of select="upper-case(.)"/>
</xsl:template>

在XSLT 1.0中,使用

<xsl:template match="text()"> 
    <xsl:value-of select="translate(., $smallcase, $uppercase)" /> 
</xsl:template> 
<xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" /> 
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />

代替

答案 1 :(得分:1)

xsl:copy-of指令始终执行精确复制;你不能用它来制作一个带有变化的副本。为此,请使用标识模板复制要精确复制的内容,并使用不同的模板来复制要更改的内容。因此:

<xsl:template match="*">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

<xsl:template match="text()">
  <xsl:value-of select="upper-case(.)"/>
</xsl:template>