XSLT: все элементы для элементов div с атрибутом класса = оригинальное имя элемента - PullRequest
0 голосов
/ 06 февраля 2012

Я получил xml в следующей форме (но гораздо больше ..)

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

Что я хочу получить с помощью xsl-преобразования, так это:

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

Не так сложно: преобразовать все элементы в элементы div с атрибутом class = оригинальное имя элемента. Кто-нибудь может подсказать, как должен выглядеть соответствующий XSL?

Спасибо!

1 Ответ

3 голосов
/ 06 февраля 2012

Вы можете сделать это (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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...