在xslt中将XML节点转换为大写
我正在尝试将属性值转换为大写,并使用下面的xslt对其进行转换。但是,这些词并没有完全转换在xslt中将XML节点转换为大写,xslt,Xslt,我正在尝试将属性值转换为大写,并使用下面的xslt对其进行转换。但是,这些词并没有完全转换 <xsl:param name="lang_lower" select="'abcdefghijklmnopqrstuvwxyz'" /> <xsl:param name="lang_upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" /> <xsl:template match="//*[@attrib
<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”的父级。在这种情况下,转换是否有问题?