2017-10-22 1 views
-1

Ich habe schon zu lange daran gearbeitet. Präsidenten ist mein Wurzelelement und die Liste geht weiter durch Präsident Nummer 45. Ich muss nur Präsidenten im 21. Jahrhundert wählen, also> 41. Kann nicht knacken, wie man das richtige xsl benutzt, um das zu ermöglichen.XML, XSLT eine bestimmte Gruppe auswählen

<presidents> 
<president> 
    <number>1</number> 
    <name>George Washington</name> 
    <date> 
     2/22/1732 
    </date> 
    <took_office>April 30, 1789</took_office> 
    <left_office>March 4, 1797</left_office> 
    <party>no party</party> 
    <term> 
     <number>1</number> 
     <vice_president>John Adams</vice_president> 
    </term> 
    <term> 
     <number>2</number> 
     <vice_president>John Adams</vice_president> 
    </term> 
</president> 

Im folgenden XSLT, kommentierte ich aus den <xsl:value-of, dass ich, dass ich versuche, funktioniert nicht.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html"/> 
<xsl:template match="/"> 
    <!--<xsl:value-of select="//president[number(@number)>41]/number"/>--> 
    <html> 
     <head> 
      <link rel="stylesheet" type="text/css" href="president_21c.css"/> 
      <title>Table of US Presidents</title> 
     </head> 
     <body> 
      <h1>Table of US Presidents</h1> 
      <table border="2"> 
       <tr bgcolor="orange"> 
        <th>Name</th> 
        <th>Birthday</th> 
        <th>Took Office</th> 
        <th>Left Office</th> 
        <th>Party</th> 
        <th>Picture</th> 
       </tr> 
       <xsl:apply-templates select="presidents/president"/> 
      </table> 
     </body> 
    </html> 
</xsl:template> 

Antwort

2

Wenn Sie „Präsidenten im 21. Jahrhundert“ der eigentliche Ausdruck Sie wollen, ist number(substring-after(left_office, ', ')) >= 2000 auswählen möchten. Dies setzt voraus, dass alle Ihre Daten das gleiche Format haben. MMM dd, yyyy.

Sie können tatsächlich Ihren Zustand als Teil des xsl:apply-templates

<xsl:apply-templates 
     select="presidents/president[number(substring-after(left_office, ', ')) >= 2000]"/> 

eine alternative Bedingung

die letzten vier Zeichen des Datums zu erhalten wäre setzen
<xsl:apply-templates 
    select="presidents/president[number(substring(left_office, string-length(left_office) - 3)) >= 2000]"/> 
1

Sie haben den Abschluss </presidents> von Ihrem XML und die abschließenden </xsl:stylesheet> von Ihrem XSLT verpaßt. Außerdem scheint es, dass Sie einen Link zu einem Bild jedes Präsidenten anzeigen möchten, das sich jedoch nicht in Ihrer Quell-XML befindet.

Wenn Sie auf die Zahl diskriminieren basiert, versuchen Sie dies:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="html"/> 
    <xsl:template match="/"> 
     <!--<xsl:value-of select="//president[number(@number)>41]/number"/>--> 
     <html> 
      <head> 
       <link rel="stylesheet" type="text/css" href="president_21c.css"/> 
       <title>Table of US Presidents</title> 
      </head> 
      <body> 
       <h1>Table of US Presidents</h1> 
       <table border="2"> 
        <tr bgcolor="orange"> 
         <th>Name</th> 
         <th>Birthday</th> 
         <th>Took Office</th> 
         <th>Left Office</th> 
         <th>Party</th> 
         <th>Picture</th> 
        </tr> 
        <xsl:for-each select="presidents/president"> 
         <xsl:if test="number &gt;= 41"> 
          <tr> 
           <td><xsl:value-of select="name" /></td> 
           <td><xsl:value-of select="date" /></td> 
           <td><xsl:value-of select="took_office" /></td> 
           <td><xsl:value-of select="left_office" /></td> 
           <td><xsl:value-of select="party" /></td> 
          </tr> 
         </xsl:if> 
        </xsl:for-each> 
       </table> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 
+0

Sorry, aber vergessen zu erwähnen, ich kann nicht für jede auf diese verwenden. –

+0

@PaulPearson Hilfreich. Vielen Dank... – Steve

2

Gerade

ändern
<xsl:apply-templates select="presidents/president"/> 

bis

<xsl:apply-templates select="presidents/president[number > 41]"/>