2012-02-13 64 views
4

在XSL中,如何在处理文档之前将文档中的所有元素名称转换为小写字母?我们使用XSLT 2.0,我们已经尝试了以下,但它不工作...使用XSL将所有元素名称转换为小写?

<A> 
    <ITEMS> 
    <ITEM/> 
    <ITEM/> 
    </ITEMS> 
</A> 


<xsl:transform> 

    <xsl:template match="*">  
    <xsl:element name="{lower-case(local-name())}"> 
     <xsl:apply-templates/> 
    </xsl:element> 
    </xsl:template>  

//do work here... 
<xsl:apply-templates> 
    ... 

</xsl:transform> 
+0

你是什么意思的“不工作”?你有没有得到任何输出? – 2012-02-13 21:12:01

+0

对不起,我得到输出,是的,但案件没有改变;输出XML是输入XML的精确副本。 – raffian 2012-02-13 21:20:18

+0

只是为了进一步阐明,你正试图在用其他模板处理之前更改元素*的大小写,对吗?所以你会匹配“项目”而不是“项目”,对吗? – 2012-02-13 21:30:02

回答

4

它的工作原理下的Altova的XMLSpy:

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" > 
<xsl:output exclude-result-prefixes="xsl xs" indent="yes"/> 

    <xsl:template match="*">  
    <xsl:element name="{lower-case(local-name())}"> 
     <xsl:apply-templates/> 
    </xsl:element> 
    </xsl:template>  

</xsl:stylesheet> 

XML输入:

<?xml version="1.0" encoding="UTF-8"?> 
<A> 
    <ITEMS> 
    <ITEM/> 
    <ITEM/> 
    </ITEMS> 
</A> 

XML输出:

<?xml version="1.0" encoding="UTF-8"?> 
<a> 
    <items> 
     <item/> 
     <item/> 
    </items> 
</a> 
0
translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ", 'abcdefghijklmnopqrstuvwxyz') 
+0

当OP使用XSLT 2.0时没有理由使用'translate()'。 – 2012-02-13 21:28:14

+0

没错。出于某种原因,我读到他们没有使用Xslt 2.0。 – Pawel 2012-02-13 21:37:05