2015-12-30 57 views
0

我試圖將屬性值轉換爲大寫,並使用下面的一段xslt對其進行轉換。但是,這些詞沒有完全轉化。在xslt中將XML節點轉換爲大寫

<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')中的值沒有得到轉換。

+2

請發佈一個最小但完整的XML示例和一個最小但完整的XSLT示例,以便我們重現該問題,以及有關使用的XSLT處理器,獲取的結果以及所需結果的信息。 –

+0

當我使用這個模板進行轉換時,其中一些單詞會被轉換,剩下的則會被忽略。例如,在'de'中,輸出被轉換爲'dE'而不是'DE'等。 –

+0

同時,用於改變情況的轉換髮生在模板的末尾。但是,對於'attributename'的父項還有另一個xslt模板。在這種情況下,轉換是否存在問題? –

回答

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> 

如果仍然有問題,那麼提供最少但完整的樣本,讓其他人重現問題。