如何使用 XSLT 1.0 获取小写的 xml 节点

How to get xml Nodes which are in lower case using XSLT 1.0

我需要使用 XSLT 1.0 获取 XML 小写的节点及其值,并将输出显示为 XML

        <main>
           <ACAT>Cat Name A </ACAT>
           <bcat>Cat Name b </bcat>
           <ccat>Cat Name c </ccat>
           <dcat>Cat Name d </dcat>
           <ECAT>Cat Name E </ECAT>
           <fcat>Cat Name f </fcat>
        </main>

Mu​​ 期望的输出是

        <main>
           <bcat>Cat Name b </bcat>
           <ccat>Cat Name c </ccat>
           <dcat>Cat Name d </dcat>
           <fcat>Cat Name f </fcat>
        </main>

您只需要复制现有节点的身份模板...

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

然后是另一个忽略非小写节点的模板。在 XSLT 1.0 中,这可以通过使用翻译语句来完成,将大写字母翻译成小写字母,并检查结果是否不同

<xsl:template match="*[translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') != name()]" />

试试这个 XSLT

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="xml" encoding="UTF-8" indent="yes" />

    <xsl:template match="*[translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') != name()]" />

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>