2012-05-16 77 views
0

我有以下XML源XSLT - 一棵樹替換節點

<forms> 
    <x> 
    <y> 
     <x-component select="foobar" /> 
    </y> 
    </x> 


    <component name="foobar"> 
    <some> 
     <component> 
      <value>text</value> 
     </component> 
    </some> 
    </component> 
</forms> 

我試圖把它轉換爲以下幾點:

<?xml version="1.0" encoding="UTF-8"?> 
<forms> 
    <x> 
     <y> 
      <component name="foobar"> 
       <some> 
        <component> 
         <value>text</value> 
        </component> 
       </some> 
      </component> 
     </y> 
    </x> 
</forms> 

我的XSL文件是

<?xml version="1.0" encoding="UTF-8" ?> 

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 

    <xsl:template match="x-component"> 
     <yoba> 
      <xsl:attribute name="z"> 
       <xsl:value-of select="@select"/> 
      </xsl:attribute> 
      <xsl:apply-templates select="/forms/component[@[email protected]]/*" /> 
     </yoba> 
    </xsl:template> 

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

    <xsl:template match="/"> 
     <xsl:apply-templates select="*"/> 
    </xsl:template> 
</xsl:stylesheet> 

如何傳遞當前n的select屬性的值(代替PLACEHOLDER):

<xsl:apply-templates select="/forms/component[@name=<PLACEHOLDER>]/*" /> 
+0

您的XSLT輸出** yoba **元素,該元素不在您的預期輸出中。它是否正確? –

+0

這是爲了調試,我得到輸出與yoba,但xsl:應用模板裏面yoba沒有呈現 – Kerb

回答

2

使用current()/@select。或者更好地定義一個密鑰<xsl:key name="k1" match="component" use="@name"/>和do <xsl:apply-templates select="key('k1', @select)"/>

+0

謝謝,current()/ @選擇工作正常 – Kerb

相關問題