Создать переменную метку из значения метки XML - PullRequest
1 голос
/ 30 августа 2011

Можно ли изменить данную XML-структуру

<Cars>
    <Car>Honda</Car>
    <Car>Ferrari</Car>
</Cars>

с XLST до

<Cars>
    <Honda></Honda>
    <Ferrari></Ferrari>
</Cars>

Я немного знаю XSLT, но не знаю, как создавать переменные теги.

Спасибо всем. Я ценю все три ответа и проголосовал за них.

Ответы [ 3 ]

3 голосов
/ 30 августа 2011

Вы можете использовать для создания элементов с заданным именем. Например. в вашем случае это будет что-то вроде:

<xsl:template match="Car">
    <xsl:element name="{text()}"></xsl:element>
</xsl:template>

UPD: Это фрагмент Обычно это хороший подход для таких преобразований, которые предназначены просто для изменения нескольких узлов в дереве. Вы определяете копию шаблона:

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

, которая просто копирует все XML-дерево как есть, а затем добавляет некоторые настраиваемые шаблоны для определенных элементов, атрибутов и т. Д., Например, что касается "Авто" выше.

3 голосов
/ 30 августа 2011

Вы ищете xsl:element, имя которого вычисляется во время выполнения с использованием фигурных скобок, например:

<xsl:template match="/">
    <xsl:for-each select="Cars/Car">
        <xsl:element name="{.}"/>
    </xsl:for-each>
</xsl:template>
2 голосов
/ 30 августа 2011

Попробуйте это:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:apply-templates />
    </xsl:template>

    <xsl:template match="Cars">
        <Cars>
            <xsl:for-each select="Car">
                <xsl:element name="{.}"/>
            </xsl:for-each>
        </Cars>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...