【问题标题】:XSLT: all elements to div elements with class attribute = original element nameXSLT:所有元素到具有类属性的div元素=原始元素名称
【发布时间】:2012-02-06 15:32:04
【问题描述】:

我有一个如下形式的 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 属性 = 原始元素名称的 div 元素。 谁能给我一个提示,一个合适的 XSL 应该是什么样子?

谢谢!

【问题讨论】:

    标签: html xml xslt


    【解决方案1】:

    你可以这样做(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>
    

    【讨论】:

    • 如果你想将类属性输出到像attr-class 这样的东西怎么办?请您也解释一下好吗?
    • 使用第二个xslt,将第一个模板中的class属性改为attr-class属性,并在第二个模板的if语句中用name() != 'attr-class'更改test .如果原始 XML 文件中存在某些名为“attr-class”的属性,则此处使用第二个模板以避免出现问题。希望这会有所帮助。
    猜你喜欢
    • 2023-02-25
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多