Zum Inhalt springen

<xsl:param einfacher zähler


forTeesSake

Empfohlene Beiträge

hi und hallo,

ich möchte gerne in einer xsl datei einen zähler in einer for-each schleife hochzählen und dann ausgeben. leider funktioniert das überhaupt nicht so wie ich mir das vorstelle und für dieses recht einfache finde ich im netz nicht wirklich die lösung.

das problem ist , dass die zählervariable (bzw. param) $count nicht "sichtbar" ist.

hier mal der code


<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">


<xsl:for-each select="catalog/cd">

	<xsl:call-template name="countVal">

		<!--HIER DER AUFRUF UM $COUNT HOCHZUZÄHLEN -->

		<xsl:with-param name="count" select="$count + 1"/>

	</xsl:call-template>

</xsl:for-each>


</xsl:template>


<xsl:template name="countVal">

	<!--SETZEN DER VARIABLEN COUNT -->

	<xsl:param name="count" select="1"/>

	<xsl:value-of select ="$count"/>

</xsl:template>


</xsl:stylesheet> 

kann mir da jemand helfen???

Link zu diesem Kommentar
Auf anderen Seiten teilen

hab ein bisschen weitergeforscht und was gefunden. leider klappt es wieder nicht befriedigend


<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" encoding="ISO-8859-1"/>



<xsl:template match="/">

<xsl:call-template name="loop">

</xsl:call-template>

</xsl:template>


<xsl:template name="loop">

	<xsl:param name="index">0</xsl:param>

	<xsl:param name="max">0</xsl:param>

	Index: <xsl:value-of select="$index"/><br />

	<xsl:for-each select="catalog/cd">

		<xsl:call-template name="loop">

		<xsl:with-param name="index"><xsl:value-of select="$index + 1"/></xsl:with-param>

		<xsl:with-param name="max"><xsl:value-of select="$max"/></xsl:with-param>

		</xsl:call-template>

	</xsl:for-each>

</xsl:template>


</xsl:stylesheet>

ich habe in meiner xml-datei 3 <cd>

die ausgabe ist folgende:

Index: 0

Index: 1

Index: 1

Index: 1

und das kapier ich nicht, da doch in der for-each schleife immer $index + 1 übergeben wird...

wenn ich die for-each schleife weglasse, ist die ausgabe endlos (klar) und richtig:

Index: 0

Index: 1

Index: 2

Index: 3

Index: 4

Index: 5

Index: 6

Index: 7

Index: 8

Index: 9

.

.

.

was läuft da schief???

danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi

Hallo Fabian,

es gibt das Element <xsl:call-template> , damit lässt sich sowas realisieren:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" encoding="ISO-8859-1"/>

<xsl:template match="/">

<xsl:call-template name="loop">

<xsl:with-param name="index">0</xsl:with-param>

<xsl:with-param name="max">5</xsl:with-param>

</xsl:call-template>

</xsl:template>

<xsl:template name="loop">

<xsl:param name="index">0</xsl:param>

<xsl:param name="max">0</xsl:param>

<xsl:if test="$index < $max">

Index: <xsl:value-of select="$index"/><br />

<xsl:call-template name="loop">

<xsl:with-param name="index"><xsl:value-of select="$index + 1"/></xsl:with-param>

<xsl:with-param name="max"><xsl:value-of select="$max"/></xsl:with-param>

</xsl:call-template>

</xsl:if>

</xsl:template>

</xsl:stylesheet>

Unabhängig von der verwendeten XML-Datei sollte in diesem Fall der Output folgendermassen aussehen:

Index: 0

Index: 1

Index: 2

Index: 3

Index: 4

gruss

Stefan

Quelle:

http://www.wer-weiss-was.de/theme193/article999276.html

Gruß,

Markus

Link zu diesem Kommentar
Auf anderen Seiten teilen

jo kills, genau daher hab ichs ja auch. nur ist bei mir der unterschied dass ich diese if-test-anweisung durch ein for-each ausgetauscht habe und erstmal alles überflüssige aussenrum weggeworfen habe.

es klappt ohne for-each perfekt, das heisst $index wird übergeben und hochgezählt.

wenn mein for-each drin ist wird die schleife 3mal ausgeführt was auch richtig ist weil ich drei einträge <cd> in meiner xml hab, aber $index wird nur beim ersten mal um 1 erhöht.

ausgabe:

0

1

1

1

da liegt das problem....

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

ich würd ma so versuchen:


<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" encoding="ISO-8859-1"/>



<xsl:template match="/">

<xsl:call-template name="loop"/>

</xsl:template>


<xsl:template name="loop">

	<xsl:param name="index">0</xsl:param>

	Index: <xsl:value-of select="$index"/><br />

	<xsl:for-each select="catalog/cd">

		<xsl:call-template name="loop">

		<xsl:with-param name="index"><xsl:value-of select="$index + 1"/></xsl:with-param>

		</xsl:call-template>

	</xsl:for-each>

</xsl:template>


</xsl:stylesheet>

Gruß,

Markus

Link zu diesem Kommentar
Auf anderen Seiten teilen

*heul*...leider nicht.

sleber output:

Index: 0

Index: 1

Index: 1

Index: 1

die xml datei ist die typische im web auffindbare tutorial xml:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!-- Edited with XML Spy v4.2 -->

<?xml-stylesheet type="text/xsl" href="cdcatalog_old.xsl"?>

<catalog>

<cd>

<title>Empire Burlesque</title>

<artist>Bob Dylan</artist>

<country>USA</country>

<company>Columbia</company>

<price>10.90</price>

<year>1985</year>

</cd>

<cd>

<title>Hide your heart</title>

<artist>Bonnie Tyler</artist>

<country>UK</country>

<company>CBS Records</company>

<price>9.90</price>

<year>1988</year>

</cd>

<cd>

<title>Greatest Hits</title>

<artist>Dolly Parton</artist>

<country>USA</country>

<company>RCA</company>

<price>9.90</price>

<year>1982</year>

</cd>

.

.

.

Link zu diesem Kommentar
Auf anderen Seiten teilen

zeig ma das dazugehörige xml

Edit:


<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" encoding="ISO-8859-1"/>



<xsl:template match="/">

<xsl:call-template name="loop"/>

</xsl:template>


<xsl:template name="loop">

	<xsl:param name="index">0</xsl:param>

	Index: <xsl:value-of select="$index"/><br />

	<xsl:for-each select="/catalog">

		<xsl:call-template name="loop">

		<xsl:with-param name="index"><xsl:value-of select="$index + 1"/></xsl:with-param>

		</xsl:call-template>

	</xsl:for-each>

</xsl:template>


</xsl:stylesheet>

Oder

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" encoding="ISO-8859-1"/>



<xsl:template match="/">

<xsl:call-template name="loop"/>

</xsl:template>


<xsl:template name="loop">

	<xsl:param name="index">0</xsl:param>

	Index: <xsl:value-of select="$index"/><br />

	<xsl:for-each select="catalog">

		<xsl:call-template name="loop">

		<xsl:with-param name="index"><xsl:value-of select="$index + 1"/></xsl:with-param>

		</xsl:call-template>

	</xsl:for-each>

</xsl:template>


</xsl:stylesheet>

Oder

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" encoding="ISO-8859-1"/>



<xsl:template match="/">

<xsl:call-template name="loop"/>

</xsl:template>


<xsl:template name="loop">

	<xsl:param name="index">0</xsl:param>

	Index: <xsl:value-of select="$index"/><br />

	<xsl:for-each select="/catalog/cd">

		<xsl:call-template name="loop">

		<xsl:with-param name="index"><xsl:value-of select="$index + 1"/></xsl:with-param>

		</xsl:call-template>

	</xsl:for-each>

</xsl:template>


</xsl:stylesheet>

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...