在xslt中将XML节点转换为大写

时间:2015-12-30 11:15:58

标签: xslt

我正在尝试将属性值转换为大写,并使用下面的xslt来转换它。但是,这些词语没有完全转换。

<xsl:param
    name="lang_lower"
    select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:param
    name="lang_upper"
    select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />

<xsl:template match="//*[@attributename]">
    <xsl:element name="{name()}">
        <xsl:attribute name="L">
    <xsl:value-of select="translate(@attributename, $lang_lower, $lang_upper)" />
  </xsl:attribute>
        <xsl:copy-of select="@*[name()!='attributename']" />
        <xsl:apply-templates />
    </xsl:element>
</xsl:template>

但是,有时,属性中的值(&#39;属性名称&#39;)不会被转换。

1 个答案:

答案 0 :(得分:0)

您没有提供任何信息以允许我们重现问题,我看到的唯一奇怪的是,您要转换的属性不匹配,而是匹配其父元素。所以我将代码更改为

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">

<xsl:param
    name="lang_lower"
    select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:param
    name="lang_upper"
    select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="@attributename">
    <xsl:attribute name="L">
        <xsl:value-of select="translate(., $lang_lower, $lang_upper)" />
    </xsl:attribute>
</xsl:template>

</xsl:stylesheet>

然后应该没问题,请参阅http://xsltransform.net/bnnZWo输入

<root>
    <foo attributename="de" bar="baz"/>
</root>

转换为结果

<?xml version="1.0" encoding="utf-8"?><root>
    <foo L="DE" bar="baz"/>
</root>

如果您仍有问题,请提供最少但完整的样本,以便其他人重现问题。