2010-10-12 6 views
1

I "m de nouveau à xslt, et maintenant je suis stucked un peu avec ellestucked avec xslt

J'ai un 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> 

Je veux convertir quelque chose comme ça:

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

j'ai écrit un 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> 

Mais ne fait vraiment pas ce que je veux. Qu'ai-je fait de mal?

+0

obtenez-vous une sortie du tout (ce qui est-il)? ou obtenez-vous des messages d'erreur (que sont-ils)? – Jacob

+0

Je reçois une sortie. Il conserve la structure, mais dans l'attribut de texte, j'ai toutes les valeurs des fils du noeud (par exemple ) Ces valeurs sont également montrées dans la sortie comme la valeur des éléments de transformation, et je aussi avoir un problème de linebreak ... – mimrock

Répondre

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

Plus compact, cette feuille de style:

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

Sortie:

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