2 Stimmen

Drucken einer Zählung mit XSLT

Ich habe eine XML-Datei, die ich mithilfe einer XSLT-Datei in XHTML umwandeln möchte. Ich habe mich gefragt, ob es möglich ist, die Anzahl der Aufrufe einer Vorlage zu ermitteln. Dies ist mein XML:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" encoding="UTF-8" href="car.xslt" version="1.0"?>
<vehicle>
  <car>
    <make>Honda</make>
    <color>blue</color>
  </car>
  <car>
    <make>Saab</make>
    <color>red</color>
  </car>
</vehicle>

Und das ist mein XSLT:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
  <table cellpadding="5" border="1">
    <tr><td>number</td><td>make</td><td>color</td></tr>
        <xsl:apply-templates/>
  </table>
</body>
</html>
</xsl:template>

<xsl:template match="car">
    <tr>
      <td>#</td><td><xsl:value-of select="make"/></td><td><xsl:value-of select="color"/></td>
    </tr>
</xsl:template>

</xsl:stylesheet>

Ich möchte die Anzahl der Ausdrucke eines Fahrzeugs anstelle von # ausgeben, so dass es wie folgt aussieht:

Nummer Marke Farbe 1 Honda blau 2 Saab rot

anstelle von:

Nummer machen Farbe # Honda blau # Saab rot

Hat irgendjemand eine Idee? Ich hatte gehofft, dies könnte mit nur xsl:value-of und XPath getan werden

3voto

ChaosPandion Punkte 75527

Ersetzen Sie

#

Mit

<xsl:value-of select="position()"/>

1voto

Greg Hewgill Punkte 882617

Sie können dies ein wenig umgestalten, so dass Sie statt der Verwendung von <xsl:apply-templates/> tun Sie etwas in dieser Art:

<tr><td>number</td><td>make</td><td>color</td></tr>
<xsl:for-each select="/vehicle/car">
  <tr>
    <td><xsl:value-of select="position()" /></td><td>...</td>
  </tr>
</xsl:for-each>

In diesem Fall ist die position() Funktion bezieht sich auf die Iterationsnummer der zugehörigen for-each Schleife. Dies könnte Ihnen helfen, das zu finden, was Sie suchen.

1voto

Tomalak Punkte 320467

Minimale Veränderung:

<xsl:stylesheet 
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/1999/xhtml"
>
  <xsl:template match="/vehicle">
    <html>
      <body>
        <table cellpadding="5" border="1">
          <tr>
            <td>number</td>
            <td>make</td>
            <td>color</td>
          </tr>
          <xsl:apply-templates select="car" />
        </table>
      </body>
    </html>
  </xsl:template>

  <xsl:template match="car">
    <tr>
      <td><xsl:value-of select="position()" /></td>
      <td><xsl:value-of select="make" /></td>
      <td><xsl:value-of select="color" /></td>
    </tr>
  </xsl:template>

</xsl:stylesheet>

Beachten Sie die select="car" Attribut auf der <xsl:apply-templates> . Sie stellt sicher, dass nur <car> Knoten gezählt werden, so dass Ihr position() nicht ausgeschaltet ist.

Beachten Sie auch, dass die Hauptvorlage jetzt dem Dokumentenelement und nicht dem Wurzelknoten entspricht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X