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

在xslt中将XML节点转换为大写,xslt,Xslt,我正在尝试将属性值转换为大写,并使用下面的xslt对其进行转换。但是,这些词并没有完全转换 <xsl:param name="lang_lower" select="'abcdefghijklmnopqrstuvwxyz'" /> <xsl:param name="lang_upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" /> <xsl:template match="//*[@attrib

我正在尝试将属性值转换为大写,并使用下面的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>


但是,有时属性('attributename')中的值不会被转换。

您没有提供任何信息让我们重现问题,我看到的唯一奇怪之处是,您没有匹配要转换的属性,而是匹配其父元素。所以我会把代码改成

<?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>

然后应该做得很好,看看输入在哪里

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

转换为结果

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


如果您仍然存在问题,请提供最小但完整的示例,以便其他人重现问题。

请发布最小但完整的XML示例和最小但完整的XSLT示例,以便我们重现问题,以及有关所用XSLT处理器的信息,你得到的结果和你想要的结果。当我使用这个模板进行转换时,一些单词被转换,其余的单词被忽略。例如,在“de”中,输出被转换为“de”,而不是“de”等。同时,用于更改大小写的转换发生在模板的末尾。但是,还有另一个xslt模板用于“attributename”的父级。在这种情况下,转换是否有问题?