我有一个XSL转换,我过去用这种方式查询字符串:
<xsl:value-of select="/input/as/a[@id=$id]/CaMeL[@id2=$id2]/@interest"/>
现在,碰巧CaMeL
(在XML中)应该重命名为cAmEl
。好的在我的转换中简单地改变这种情况会立即奏效,但我会失去向后兼容性。
在SO中搜索,我发现:XSLT样式表:将文本更改为大写
接受的答案看起来很有希望,但我目前还不知道如何填写答案中使用的doc
参数。
如何在现有的<xsl:template match="/">
中添加翻译步骤,在应用任何其他模板之前将整个文档翻译成小写
也许这会有所帮助。但我没有测试它。你能提供一些示例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 traformation——下一步就是您的转换。但是,我不知道如何使用XSLT1.0来实现它。
编辑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