2017-12-28 10 views
0

I XML-Datei mit Bücher Element, das ein type-Attribut haben, möchte ich Typ und alle Elemente mit gleichen Typs innerhalb UL LI html wie folgt angezeigt:Wie Element mit demselben Typ-Attribut in HTML ul in XML XSLT anzuzeigen?

  1. Typ1
    • book1
    • book2
  2. Typ2
    • book3
    • book4
  3. das ist mein xml-Code:

Xml file in this link und meine Xslt: Xslt file in this link

jede Hilfe, die ich geschätzt wird?

+0

Bitte teilen Sie die Eingabe-XML und den XSLT-Code, die Sie bisher versucht haben. –

+0

Es klingt wie ein Gruppierungsproblem. –

Antwort

0

Dies ist ein Fall von grouping (wie zu Recht von @ Martin Honnen out) und da Sie XSLT 1.0 verwenden, wäre ein <xsl:key> erfordert definiert werden und dann für die Gruppierung verwendet.

Da die Gruppierung auf <titre> getan werden soll, wird der Schlüssel als

<xsl:key name="keyTitre" match="livre" use="titre" /> 

Als nächstes werden wir eine Schleife durch alle <livre> Elemente definiert werden, die den Schlüssel gruppiert verwenden.

<xsl:for-each select="livre[generate-id() = generate-id(key('keyTitre', titre)[1])]"> 

Schließlich eine verschachtelte Schleife für die gruppierten Schlüssel.

<xsl:for-each select="key('keyTitre', titre)"> 

Unten ist die vollständige XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html" /> 
    <xsl:strip-space elements="*" /> 

    <xsl:key name="keyTitre" match="livre" use="titre" /> 

    <xsl:template match="bibliotheque"> 
     <html> 
      <body> 
       <xsl:for-each select="livre[generate-id() = generate-id(key('keyTitre', titre)[1])]"> 
        <ul> 
         <xsl:value-of select="titre" /> 
         <xsl:for-each select="key('keyTitre', titre)"> 
          <li> 
           <xsl:value-of select="concat(auteur/nom, ' ', auteur/prenom)" /> 
          </li> 
         </xsl:for-each> 
        </ul> 
       </xsl:for-each> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

Die obige XSLT, wenn sie auf der XML-Eingabe laufen erzeugt das unten Ergebnis. Da die Eingabe-XML drei verschiedene Werte für <titre> hat, gibt es 3 <ul> Elemente in der Ausgabe.

<html> 
    <body> 
     <ul> 
      t1 
      <li>n1 p1</li> 
     </ul> 
     <ul> 
      t2 
      <li>n2 p2</li> 
     </ul> 
     <ul> 
      t3 
      <li>n3 p3</li> 
     </ul> 
    </body> 
</html>