在应用任何其他模板之前,我如何将完整的文档翻译成小写



我有一个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

相关内容

  • 没有找到相关文章

最新更新