Warum wird <xsl:number> nicht hochgezählt?

M

m0ps

hallo,
stehe gerade wie der ochs vorm berg...

hab folgendes in meiner xml stehen:

HTML-Code:

<lg rhyme="aab">
<l>
blabla <rhyme label="a">muh</rhyme>
</l>
<l>
blabla <rhyme label="a">kuh</rhyme>
</l>
<l>
blabla <rhyme label="b">haufen</rhyme>
</l>
</lg>

in meiner xsl habe ich ein template geschrieben, welches folgendermaßen aussieht:

HTML-Code:

<xsl:template match="rhyme">
<span>
<xsl:attribute name="id">
<xsl:text>r_</xsl:text><xsl:number/>
</xsl:attribute>
<xsl:value-of select="."/>
</span>
<script type="text/javascript">addElement("<xsl:value-of select="@label"/>","<xsl:text>r_</xsl:text><xsl:number/>");</script>
</xsl:template>

wenn ich dann aber das ganze in eine html umwandeln lasse, wird aber number nicht hochgezählt sondern bleibt ständig auf 1:

<script type="text/javascript">addElement("a","r_1");</script>
<script type="text/javascript">addElement("a","r_1");</script>
<script type="text/javascript">addElement("b","r_1");</script>

wie kann ich das beheben?

greetz
 
jo, das funktioniert. habe bloß den namespace aus dem "template match=""" entfernt, ansonsten ist es 1 zu 1 übernommen (natürlich habe ich nur das template gepostet, die xsl selber sieht gesamt natürlich anders aus. ;) ). und wie gesagt, es wird in der html auch wie unten angezeigt. nur wundert es mich eben, dass number nicht hochgezählt wird. würden die sätze nicht in den <l>-tags stehen, geht es komischerweise. o_O

weiß echt nicht mehr weiter...
 
jo, das funktioniert. habe bloß den namespace aus dem "template match=""" entfernt, ansonsten ist es 1 zu 1 übernommen (natürlich habe ich nur das template gepostet, die xsl selber sieht gesamt natürlich anders aus. ;) ). und wie gesagt, es wird in der html auch wie unten angezeigt. nur wundert es mich eben, dass number nicht hochgezählt wird. würden die sätze nicht in den <l>-tags stehen, geht es komischerweise. o_O

weiß echt nicht mehr weiter...
Und warum kannst du dann nicht wenigstens ordentliche Beiträge verfassen? Wenn du nicht möchtest das sich jemand ernsthaft dein Problem anschaut, dann ist das der richtige Weg... :rolleyes:

Schau dir die Netiquette an. Achte auf Groß-/Kleinschreibung!

Verwende Code-Tags!

Poste ein vollständiges Minimal-Beispiel. Dein XML-Fragment ist nichtmal valide, da sind 2 xsl:number End-Tags drin die kein Start-Tag haben. Jedenfalls seh ich keins, könnte auch an der Form liegen.

Gruß
 
Entschuldigung, ich werd ab jetzt auf meine Rechtschreibung achten.

Im Übrigen sind das keine End-Tags... Ein End-Tag sieht so aus: </number> Ich habe ein geschlossenes Tag geschrieben: <number/> welches valide ist.

Hier die XSL, die aufs Nötigste reduziert wurde:

HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0">
  <xsl:output encoding="UTF-8" indent="yes" method="html"/>
  <xsl:template match="/">
    <script type="text/javascript" src="site/js/rhyme.js"/>
    <div style="position:absolute; bottom:30px; right:0px; ">Zeige Reimschema:
      <input type="checkbox" onclick="changeColor()"/>
    </div>
    <div id="text1" style="float:left; height:79%; width:40%; overflow:scroll;">
      <xsl:apply-templates select="//tei:div"/>
    </div>
  </xsl:template>

  <xsl:template match="tei:rhyme">
    <span>
      <xsl:attribute name="id">
        <xsl:text>r_</xsl:text><xsl:number/>
      </xsl:attribute>
      <xsl:value-of select="."/>
    </span>
    <script type="text/javascript">addElement("<xsl:value-of select="@label"/>","<xsl:text>r_</xsl:text><xsl:number/>");</script>
  </xsl:template>

  <xsl:template match="tei:pb">
    <xsl:variable name="link">
      <xsl:text>bild.jpg</xsl:text>
    </xsl:variable>
    <span>
      <xsl:attribute name="id">
        <xsl:text>link_</xsl:text>
        <xsl:text>link_</xsl:text><xsl:number/>
      </xsl:attribute>
      <xsl:value-of select="."/>
    </span>
    <script type="text/javascript">addPositionAndLink("<xsl:value-of select="$link"/>","<xsl:text>link_</xsl:text><xsl:number/>");
    </script>
  </xsl:template>

</xsl:stylesheet>

Zum vergleich wurde ein anderes Template mit eingebaut, welches im Prinzip die gleiche Funktion besitzt, aber funktioniert.
 
Habe meinen Fehler gefunden:

<number level="any"/> muss es heißen, damit durch alle Ebenen gezählt wird. Sonst wird nur immer ein <l>-Tag betrachtet.
 
Hi.

Geht doch. ;-) Fehlt nur noch ein passendes Eingabedokument.

Ich hatte die Kurz-Tags tatsächlich als End-Tags gesehen. Vermutlich einfach weil ein leeres <xsl:number/> Tag in dem Kontext keinen Sinn macht. Du mußt schon sagen was xsl:number da zählen soll.

Gruß
 
Zurück