2013-10-09 23 views
0

我的xml和xslt文件看起來像下面一樣。問題是當我申請我的轉換文件只有第二個發生第一個跳過。我怎麼能跑在第一次運行。請幫忙謝謝。如何對同一節點運行兩個xslt轉換

//BEFORE TRANSFORMATION 

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

我的XSLT文件

<?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>