2010-10-12 55 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>