2017-01-25 3 views
1

De le code XML suivant:Comment déterminer l'ordre des colonnes de la table dans xslt?

<?xml version="1.0"?>  
<lieferungen> 
    <artikel id="3526"> 
    <name>apfel</name> 
    <preis stueckpreis="true">8.97</preis> 
    <lieferant>Fa. Krause</lieferant> 
    </artikel> 
    <artikel id="7866"> 
    <name>Kirschen</name> 
    <preis stueckpreis="false">10.45</preis> 
    <lieferant>Fa. Helbig</lieferant> 
    </artikel> 
    <artikel id="3526"> 
    <name>apfel</name> 
    <preis stueckpreis="true">12.67</preis> 
    <lieferant>Fa. Liebig</lieferant> 
    </artikel> 
    <artikel id="7789"> 
    <name>Ananas</name> 
    <preis stueckpreis="true">8.60</preis> 
    <lieferant>Fa. Richard</lieferant> 
    </artikel> 
</lieferungen> 

Je veux créer une table qui se présente comme suit:

table with four columns

A cette fin, j'ai écrit la xslt suivante:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" 
    version="2.0"> 

    <xsl:template match="lieferungen"> 
     <html> 
      <head> 
       <title> 
        <xsl:text>Lieferungen</xsl:text> 
       </title> 
      </head> 
      <body bgcolor="#ffffff"> 
       <h1> 
        Lieferungen (Deliveries) 
       </h1> 
       <hr/> 
       <table border="1"> 
        <tr> 
         <th>Nummer</th> 
         <th>Article</th> 
         <th>Price</th> 
         <th>Supplier</th> 
        </tr> 
        <xsl:apply-templates/>    
       </table> 
      </body> 
      <hr/> 
      <p> 

      </p> 
     </html> 
    </xsl:template> 
    <xsl:template match="artikel"> 
     <tr> 
      <td> 
       <xsl:value-of select="@id"/> 
      </td> 
      <xsl:apply-templates/> 
     </tr> 
    </xsl:template> 

    <xsl:template match="name"> 
     <td> 
      <xsl:value-of select="."/> 
     </td> 
    </xsl:template> 

    <xsl:template match="preis"> 
     <td> 
      <xsl:value-of select="."/> 
     </td> 
    </xsl:template> 

    <xsl:template match="lieferant"> 
     <td> 
      <xsl:value-of select="."/> 
     </td> 
    </xsl:template> 


</xsl:stylesheet> 

Le code a bien fonctionné et j'ai eu ma table ... cependant, maintenant je veux changer les colonnes, en particulier je veux changer les colonnes 3 un d 4. À cette fin, je passe simplement l'ordre du modèle pour « preis » et « Lieferant », à savoir le nouvel ordre est maintenant:

<xsl:template match="lieferant"> 
     <td> 
      <xsl:value-of select="."/> 
     </td> 
    </xsl:template> 

    <xsl:template match="preis"> 
     <td> 
      <xsl:value-of select="."/> 
     </td> 
    </xsl:template> 

Le reste du code est le même. Cette approche n'a cependant pas fonctionné et l'ordre des colonnes dans la table est resté le même.

Ma question est donc: Comment puis-je faire l'utilisation de l'ordinateur

<xsl:template match="lieferant"> 

dans le troisième et

<xsl:template match="preis"> 

pour la quatrième colonne du tableau?

Répondre

2

L'ordre dans lequel les modèles apparaissent dans la feuille de style est sans importance (sauf lors de la résolution de conflits). Pour changer les colonnes, changer ceci:

<xsl:template match="artikel"> 
    <tr> 
     <td> 
      <xsl:value-of select="@id"/> 
     </td> 
     <xsl:apply-templates/> 
    </tr> 
</xsl:template> 

à:

<xsl:template match="artikel"> 
    <tr> 
     <td> 
      <xsl:value-of select="@id"/> 
     </td> 
     <xsl:apply-templates select="name, lieferant, preis"/> 
    </tr> 
</xsl:template> 

Ne pas oublier de changer les étiquettes des colonnes, aussi.


Notez également que vous pouvez combiner vos trois derniers modèles en un seul comme:

<xsl:template match="name | preis | lieferant"> 
    <td> 
     <xsl:value-of select="."/> 
    </td> 
</xsl:template> 

et raccourcir encore le bloc entier juste:

<xsl:template match="artikel"> 
    <tr> 
     <xsl:apply-templates select="@id, name, lieferant, preis"/> 
    </tr> 
</xsl:template> 

<xsl:template match="@id | name | preis | lieferant"> 
    <td> 
     <xsl:value-of select="."/> 
    </td> 
</xsl:template>