2017-04-26 1 views
1

Ich versuche, eine HTML-Tabelle aus zwei Knoten-Sets in meinem XML zu erstellen und dann nach @AD zu sortieren.Sortieren einer Tabelle in xsl nach der Erstellung

Ich kann in einzelnen For-Each-Loops mit <xsl:sort select="@AD" order="ascending" /> sortieren, aber ich möchte die gesamte Tabelle sortieren.

<xsl:template match="*/Sync/AP"> 
    <table border="1"> 
     <tr> 
      <th>AD</th> 
      <th>GCD</th> 
      <th>ClearAttribute</th> 
     </tr> 
     <xsl:for-each select="./*"> 
     <tr> 
      <td><xsl:value-of select="@AD"/></td> 
      <td><xsl:value-of select="@GCD"/></td> 
      <td><xsl:value-of select="@ClearAttribute"/></td> 
     </tr>  
     </xsl:for-each> 
     <!-- Also Append the Common attributes to each region --> 
     <xsl:for-each select="../Common/*"> 
     <tr> 
      <td><xsl:value-of select="@AD"/></td> 
      <td><xsl:value-of select="@GCD"/></td> 
      <td><xsl:value-of select="@ClearAttribute"/></td> 
     </tr>  
     </xsl:for-each> 
    </table> 
</xsl:template> 
+0

Können Sie ein Beispiel Ihres XML zeigen, und auch die (sortierte) Ausgabe, die Sie erwarten? Vielen Dank! –

+0

Danke für die Überprüfung Tim, aber Tomalak hat mir die Informationen, die ich suchte. – Snath

Antwort

1

Nicht zwei separate <xsl:for-each> machen. Wählen Sie alle Knoten aus, die Sie anzeigen möchten, und sortieren Sie sie in einem Schritt.

Die Gewerkschaft Betreiber | wird dafür verwendet:

<xsl:template match="Sync/AP"> 
    <table border="1"> 
     <tr> 
      <th>AD</th> 
      <th>GCD</th> 
      <th>ClearAttribute</th> 
     </tr> 
     <xsl:for-each select="./* | ../Common/*"> 
      <xsl:sort select="@AD" order="ascending" /> 
      <tr> 
       <td><xsl:value-of select="@AD"/></td> 
       <td><xsl:value-of select="@GCD"/></td> 
       <td><xsl:value-of select="@ClearAttribute"/></td> 
      </tr>  
     </xsl:for-each> 
    </table> 
</xsl:template> 

Hinweis: Auch wenn match Ausdrücke wie XPath aussehen, sind sie nicht wirklich XPath. Dies ist nicht notwendig:

<xsl:template match="Sync/AP"> 

oder sogar unter:

<xsl:template match="*/Sync/AP"> 

Sie diese stattdessen verwenden können

<xsl:template match="AP"> 

es sei denn, Sie ausdrücklich sicherstellen möchten, dass nur <AP> mit einem <Sync> Eltern sind abgestimmt.

+0

Das war was ich vermisste. Danke @Tomalak – Snath

Verwandte Themen