xsl: значение и применить шаблон к внутреннему элементу
Что я могу сделать, если у меня есть это:
<e1>t1<e2>t2</e2></e1>
и я хочу перевести с XSLT в:
<c1>t1<c2>t2</c2></c1>
Я пробовал с:
<xsl:template match="e1">
<c1>
<xsl:value-of select=".">
<xsl:apply-templates/>
</xsl:value-of>
</c1>
</xsl:template>
<xsl:template match="e2">
<c2>
<xsl:value-of select="."/>
</c2>
</xsl:template>
Но я получаю ошибку, так как значение должно быть пустым.
1 ответ
Решение
xsl:value-of
должно быть пустым, без сомнения. Но вам ничего не нужно внутри. Приведенная ниже таблица стилей является преобразованием идентичности с двумя исключениями, а именно заменой имен элементов e1
а также e2
,
Это довольно общий в том смысле, что он заменяет e1
а также e2
в любом XML-документе и оставит все остальное нетронутым.
стилей
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="e1">
<c1>
<xsl:apply-templates select="@*|node()"/>
</c1>
</xsl:template>
<xsl:template match="e2">
<c2>
<xsl:apply-templates select="@*|node()"/>
</c2>
</xsl:template>
</xsl:stylesheet>
Выход
<?xml version="1.0" encoding="UTF-8"?>
<c1>t1<c2>t2</c2></c1>