【问题标题】:Convert all element names to lower case with XSL?使用 XSL 将所有元素名称转换为小写?
【发布时间】:2012-03-05 07:04:30
【问题描述】:

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

<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>

【问题讨论】:

  • “不起作用”是什么意思?你有任何输出吗?
  • 抱歉没有澄清,我得到了输出,是的,但情况没有改变;输出 XML 是输入 XML 的精确副本。
  • 为了进一步澄清,您正试图在 处理其他模板之前更改元素的大小写,对吗?所以你会匹配“items”而不是“ITEMS”,对吧?
  • 是的,整个文档,请参阅下面 Lukasz 的回答...

标签: xml xslt transform


【解决方案1】:

它在 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>

【讨论】:

    【解决方案2】:
    translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ", 'abcdefghijklmnopqrstuvwxyz')
    

    【讨论】:

    • 当 OP 使用 XSLT 2.0 时,没有理由使用 translate()
    • 对。出于某种原因,我读到他们没有使用 Xslt 2.0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2014-09-13
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2013-06-18
    • 2012-08-02
    相关资源
    最近更新 更多