我正在尝试将属性值转换为大写,并使用下面的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;)不会被转换。
答案 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>
如果您仍有问题,请提供最少但完整的样本,以便其他人重现问题。