2014-02-05 4 views
0

, что я могу сделать, если у меня есть это: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> 

Но я получаю ошибку, так как значение должно быть пустым.

+0

Один пример не делает правила. Это * все * у вас когда-либо будет: родитель '' и '' ребенок? –

+0

Кажется, вы используете XSLT 1.0, потому что в 2.0 вы получите другую ошибку. Если вы используете XSLT 1.0, пожалуйста, не стесняйтесь, очень сложно ответить на вопросы XSLT, когда вы не знаете, какая версия используется. –

+0

Я, спасибо за ответ, я не знал, что существует разница между использованием xslt 1.0 и 2.0, во всяком случае, я использую 1.0. – testermaster

ответ

2

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> 
+0

Обратите внимание, что два исключения охватывают все в данном примере - оставляя правило без обработки. –

+0

Я знаю - входной XML может быть просто усеченным образцом, т. Е. Может быть другой контент, кроме «e1» и «e2». –

Смежные вопросы