2016-11-22 36 views
0

Доброе утро, Я пытаюсь написать XSLT 1.0 trasformation превратить этотДобавление атрибута к каждому дочернему узлу с помощью XSLT

<foo> 
    <document> 
    <content name="bar1">Bar1</content> 
    <content name="bar2">Bar2</content> 
    <content name="bar3">Bar3</content> 
    ... 
    </document> 
</foo> 

к этому

<foo> 
    <document> 
    <content name="bar1" set="top">Bar1</content> 
    <content name="bar2" set="top">Bar2</content> 
    <content name="bar3" set="top">Bar3</content> 
    ... 
    </document> 
</foo> 

поэтому я попытался это XSLT преобразование

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

<foo> 
    <document> 
    <xsl:template match="/document/*"> 
     <xsl:copy> 
     <xsl:apply-templates /> 
     <xsl:attribute name="set" select="'top'" /> 
     </xsl:copy> 
    </xsl:template> 
</document> 
</foo> 

, но, к сожалению, он не работал

Я пробовал много искать в руководствах xpath и xslt, но я не могу получить эту работу, может кто-нибудь мне помочь?

ответ

0

Ваш синтаксис XSLT выключен. Существует много способов сделать это, вот один довольно общий способ:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" omit-xml-declaration="yes" indent="yes" /> 
    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*" /> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="content"> 
    <xsl:copy> 
     <xsl:copy-of select="@*" /> 
     <xsl:attribute name="set">top</xsl:attribute> 
     <xsl:value-of select="." /> 
    </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

Первый шаблон - это шаблон идентичности; второй шаблон соответствует content узлам, копирует их, их атрибуты и добавляет атрибут set="top" и содержимое элемента.

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