也許這可以提供幫助。但我沒有測試它。你能提供一些示例XML嗎?
<xsl:value-of select="/input/as/a[@id=$id]/*[translate(local-name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='camel' and @id2=$id2]/@interest"/>
編輯
如果你想改變你的整個XML文件,以小寫(無元素和屬性,當然值),你可以使用這個下面的模板:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{translate(name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz')}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
有完成轉換爲小寫,您可以嘗試創建多遍XSLT轉換 - 下一個轉換將是您的轉換。但是,我不確定如何使用XSLT 1.0來執行此操作。
EDIT 2
好了,來這裏的全部例子。我沒有你的例子,所以我自己的例子。
樣品輸入文件:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<baba>aaa</baba>
<Baba>BBB</Baba>
</Root>
XSLT多遍排序:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="firstPassResult">
<xsl:apply-templates select="/" mode="firstPass"/>
</xsl:variable>
<xsl:template match="@*|node()" mode="firstPass">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*" mode="firstPass">
<xsl:element name="{translate(name(),'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz')}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="/">
<xsl:apply-templates select="$firstPassResult" mode="secondPass"/>
</xsl:template>
<xsl:template match="//baba" mode="secondPass">
<xsl:value-of select="text()"/>
</xsl:template>
</xsl:stylesheet>
我的工作下的Altova XMLSpy的調試器。輸出:
<?xml version="1.0" encoding="UTF-8"?>aaaBBB
多通?聽起來不錯。告訴我更多:-)我該怎麼做? – eckes 2012-02-17 11:35:20
@eckes:看我編輯 – Lukasz 2012-02-17 11:47:35
完美!我從現在開始使用XSL,但從未使用**模式**。謝謝! – eckes 2012-02-17 12:03:11