2010-10-12 59 views
1

我「新來的XSLT,現在我stucked一點與它Stucked使用XSLT

我有一個XML:

<map> 
    <node TEXT="test" TYPE="node" > 
    <element/> 
    <node TYPE="normal" > 
     <dummy> 
     <FONT> 
      mindmap_node1_l1 
     </FONT> 
     </dummy> 
     <node LINK="url.com" TYPE="node" > 
     <dummy> 
      <FONT> 
      node node1_l2) 
      </FONT> 
     </dummy> 
     <element/> 
     <element/> 
     </node> 
    </node> 
    <node TYPE="normal" > 
     <dummy> 
     <FONT> 
      mindmap_node2_l1 
     </FONT> 
     </dummy> 
     <node TYPE="normal" > 
     <dummy> 
      <FONT> 
      mindmap_node3_l2 
      </FONT> 
     </dummy> 
     </node> 
    </node> 
    </node> 
</map> 

我希望它的東西轉換這樣的:

<?xml version="1.0"?> 
<transform text=""> 
    <transform text="mindmap_node1_l1"> 
    <transform text="node node1_l2)"> 
    </transform> 
    </transform> 
    <transform text="mindmap_node2_l1"> 
    <transform text="mindmap_node3_l2"> 
    </transform> 
    </transform> 
</transform> 

我寫了一個XSLT:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="map"> 
    <xsl:apply-templates select="/map/node"/> 
    </xsl:template> 

    <xsl:template match="node"> 
    <xsl:element name="transform"> 
     <xsl:attribute name="text"> 
     <xsl:value-of select="normalize-space(.)"/> 
     </xsl:attribute> 
     <xsl:apply-templates /> 
    </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

但真的不會做我想做的事。我做錯了什麼?

+0

你得到所有任何輸出(它是什麼)?或者你收到錯誤信息(它們是什麼)? – Jacob 2010-10-12 08:06:56

+0

我得到一個輸出。它保留了結構,但是在text屬性中,我擁有節點子節點的所有值(例如,)。這些值也在輸出中顯示爲變換元素的值,I也有一個換行問題... – mimrock 2010-10-12 08:09:44

回答

1

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="xml" indent="yes"/> 
    <xsl:template match="map"> 
    <xsl:apply-templates select="/map/node"/> 
    </xsl:template> 

    <xsl:template match="node"> 
    <xsl:element name="transform"> 
     <xsl:attribute name="text"> 
     <xsl:value-of select="normalize-space(dummy/FONT)"/> 
     </xsl:attribute> 
     <xsl:apply-templates select="node"/> 
    </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 
1

更緊湊,這個樣式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="text()"/> 
    <xsl:template match="node"> 
     <transform text="{normalize-space(dummy/FONT)}"> 
      <xsl:apply-templates /> 
     </transform> 
    </xsl:template> 
</xsl:stylesheet> 

輸出:

<transform text=""> 
    <transform text="mindmap_node1_l1"> 
     <transform text="node node1_l2)"> 
     </transform> 
    </transform> 
    <transform text="mindmap_node2_l1"> 
     <transform text="mindmap_node3_l2"> 
     </transform> 
    </transform> 
</transform>