2013-10-09 7 views
0

Мой xml и xslt файл выглядят следующим образом. Проблема в том, что когда я применяю свой файл преобразования только второй, происходит 1-й пропущен. Как я мог запускать оба при первом запуске. Пожалуйста, помогите Спасибо.Как выполнить два преобразования xslt для одного узла

//BEFORE TRANSFORMATION 

<A> 
<B> 
    <Name>ThisOne</Name> 
    <Target>abc</Target> 
</B> 
</A> 

Мой XSLT FIle

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" 
> 
    <xsl:output method="xml" indent="yes"/> 

<!--Transformation 1 to replace Target Text--> 
    <xsl:template match="A/B/Target/text()"> 
    <xsl:text>xyz</xsl:text> 
    </xsl:template> 

<!--Transformation 2 to Add a new node after Target--> 
    <xsl:template match="A/B/Target"> 
    <xsl:copy-of select="."/> 
    <JOJO></JOJO> 
    </xsl:template> 

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

Что я хотел бы видеть после преобразования следующий

<A> 
<B> 
    <Name>ThisOne</Name> 
    <Target>xyz</Target> 
    <JOJO/> 
</B> 
</A> 

ответ

0

Изменить

<xsl:template match="A/B/Target"> 
    <xsl:copy-of select="."/> 
    <JOJO></JOJO> 
    </xsl:template> 

к

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

Вы можете использовать только один шаблон для перезаписи узла B. Замените эти два шаблона следующим образом:

<xsl:template match ="A/B"> 
    <B> 
     <Name><xsl:value-of select="Name"/></Name> 
     <Target>xyz</Target> 
     <JOJO/> 
    </B> 
</xsl:template> 
Смежные вопросы