我有一个XSL转换,我用它来查询字符串:
<xsl:value-of select="/input/as/a[@id=$id]/CaMeL[@id2=$id2]/@interest"/>
现在,CaMeL
(在XML中)应该重命名为cAmEl
。精细。简单地在我的变换中修改案例会立即起作用,但我会失去向后的兼容性。
在搜索SO时,我发现了这个:XSLT Stylesheet: Changing text to upper case
accepted answer看起来很有希望,但我目前仍然坚持如何填写答案中使用的doc
参数。
如何在现有的<xsl:template match="/">
中添加翻译步骤,在将要应用任何其他模板之前将整个文档翻译为小写?
答案 0 :(得分:3)
也许这会有所帮助。但我没有测试它。你能提供一些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。
编辑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