XSLT:具有class属性=原始元素名称的div元素的所有元素

时间:2012-02-06 15:32:05

标签: html xml xslt

我有以下形式的xml(但要大得多......)

<entry>
    <lemma>coaster</lemma>
    <sense>
        <trans>Untersetzer</trans>
    </sense>
</entry>

我想通过xsl-transformation获得的是:

<div class="entry">
    <div class="lemma>coaster</div>
    <div class="sense">
        <div class="trans">Untersetzer</div>
    </div>
</div>

不那么复杂:使用class attribute =原始元素名称将所有元素转换为div元素。 有人可以给我一个提示,看看合适的XSL应该是什么样的吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

你可以这样做(XSLT 1.0):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:template match="*">
        <div class="{local-name()}">
            <xsl:apply-templates/>
        </div>
    </xsl:template>
</xsl:stylesheet>

请注意,样式表会跳过遇到的属性。

评论后编辑

如果要保留属性,只需跳过任何class属性(因为您创建了一个新属性)。例如:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">
    <xsl:template match="*">
        <div class="{local-name()}">
            <xsl:apply-templates select="node()|@*"/>
        </div>
    </xsl:template>
    <xsl:template match="@*">
        <xsl:if test="name() != 'class'">
            <xsl:copy-of select="."/>            
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>