2010-05-20 6 views
0

Comment puis-je transformer un xml comme ceci:nœuds Réorganiser en XML à l'aide xslt

<xml> 
    <paragraph> 
     <data> 
      <label> title </label> 
     </data> 
     <data> 
      <label> subtitle </label> 
     </data> 

     <data> 
      <label> text </label> 
     </data> 

     <data> 
      <label> image </label> 
     </data> 
    </paragraph> 
</xml> 

Dans le code XML suivant (image avant le texte):

<xml> 
    <paragraph> 
     <data> 
      <label> title </label> 
     </data> 
     <data> 
      <label> subtitle </label> 
     </data> 
     <data> 
      <label> image </label> 
     </data> 
     <data> 
      <label> text </label> 
     </data> 
    </paragraph> 
</xml> 

je vraiment besoin d'appeler le modèle des images plutôt que du texte si le prochain nœud est une image. (La source XML est en désordre dans ce domaine)

Je copier un code J'utilise xslt:

    <xsl:when test="etiqueta = 'Imagen'"> 
        <xsl:call-template name="imprimeImagenParrafo"> 
         <xsl:with-param name="etiqueta" select="etiqueta"></xsl:with-param> 
         <xsl:with-param name="valor" select="valor"></xsl:with-param> 
         <xsl:with-param name="longitud" select="longitud"></xsl:with-param> 
         <xsl:with-param name="comentario" select="comentario"></xsl:with-param> 
         <xsl:with-param name="enlace" select="enlace"></xsl:with-param> 
         <xsl:with-param name="target_enlace" select="target_enlace"></xsl:with-param> 
        </xsl:call-template> 
        </xsl:when> 
       </xsl:when> 

Répondre

4

Vous devez régler ce pour répondre à vos données (je suppose le document source de l'échantillon est vraiment ce que vous avez pas), mais peut-être il va vous inspirer:

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

<!-- Identity copy that just passes through everything --> 
<xsl:template match="@*|node()"> 
    <xsl:apply-templates select="@*|node()"/> 
</xsl:template> 

<!-- Here we match the paragraph element, copy it and its attrs, then rearrange it's children --> 
<xsl:template match="paragraph"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*"/> 
    <!-- Edit the predicates as necessary for your real data --> 
    <!-- predicates are the things in the []...like the WHERE in a SQL query --> 
    <xsl:apply-templates select="data[normalize-space(label) = 'title']"/> 
    <xsl:apply-templates select="data[normalize-space(label) = 'subtitle']"/> 
    <xsl:apply-templates select="data[normalize-space(label) = 'image']"/> 
    <xsl:apply-templates select="data[normalize-space(label) = 'text']"/> 
    </xsl:copy> 
</xsl:template> 

Bonne chance, David

Questions connexes