Verschachtelte Schleifen

madmix

Grünschnabel
Tach auch

Ich habe ein kleines Problem und hoffe mir kann hier geholfen werden.
Ich möchte zwei eigene Arrays in je einer for-each Schleife auflösen, allerdings müssen beide Schleifen ineinander geschachtelt sein.
Im XML Baum sind alle Parameter vorhanden, nur werden mir im XSL die Knoten der inneren Schleife nicht angezeigt.

Code:
			<div id="main_left"> <!-- CSS Klasse -->
				<div id="main_left_width"> <!-- CSS Klasse -->
					<xsl:for-each select="cat">
						<a href="index.php?action=wiki&id={id}">
							<div class="kat">
								<xsl:value-of select="category" />
							</div>
						</a>
						<xsl:for-each select="subcat"> 
							<xsl:value-of select="subCategory" /><br />
						</xsl:for-each>
					</xsl:for-each>
				</div>
			</div>

cat und subcat sind hierbei zwei eiigenständige Arrays.
Das Array subcat wird anhand der GET-Variable id eingelesen und soll nun die Parameter die es erhält anzeigen.
Wie gesagt, lasse ich mir den XML Baum anzeigen sind die Daten auch alle so da wie es sein soll, lediglich die Anzeige hackt.
Ich sehe also die subkategory nbicht.
Was mache ich falsch

Danke für die Hilfe
Mad
 
So schauts aus wenn ich mir den XML Baum ausgeben lasse:

<cat nr="0">
<id>1</id>
<category>superior</category>
<status>1</status>
</cat>
?
<cat nr="1">
<id>2</id>
<category>coWorker</category>
<status>1</status>
</cat>
?
<subcat nr="0">
<subCategory>firstname</subCategory>
<categoryId>1</categoryId>
</subcat>
?
<subcat nr="1">
<subCategory>lastname</subCategory>
<categoryId>1</categoryId>
</subcat>

Wie gesagt, es wird mir nur der Knoten category ausgegeben, der Knoten subKategory fehlt zumindestens bei der Ausgabe.
 
Zuletzt bearbeitet:
So schauts aus wenn ich mir den XML Baum ausgeben lasse:

Wie gesagt, es wird mir nur der Knoten category ausgegeben, der Knoten subKategory fehlt zumindestens bei der Ausgabe.
Die subcat Element sind ja überhaupt nicht unterhalb der cat Elemente in der XML Hierarchie zu finden. So kann das nicht funktionieren, da du von einem cat Element aus kein subcat Element mit dem XPath "subcat" erreichen kannst. Und willst du denn wirklich in jeder Kategorie alle Subkategorien ausgeben?

XML:
<xsl:for-each select="cat">
	<a href="index.php?action=wiki&id={id}">
		<div class="kat">
			<xsl:value-of select="category" />
		</div>
	</a>
	<xsl:for-each select="../subcat"> 
		<xsl:value-of select="subCategory" /><br />
	</xsl:for-each>
</xsl:for-each>
Gruß
 
Zuletzt bearbeitet von einem Moderator:
Die Anzeige soll wie eine Menü,-Untermenüanzeige ausschauen.

In etwas so:

superior
--firstname, lastname
coWorker

oder

superior
coWorker
--firstname, lastname

Klicke ich also auf eine Oberkategorie übergebe ich die jeweilige kategorieId an ein Script welches mir die Unterkategorien einliest die in der DB mit der KategorieId verknüpft sind.
Gleichzeitig lade ich die Seite neu damit nur die aktuellen Subkategorien im Array sind.
Anzeigen möchte ich das ganze dann, wie du siehst, immer unter den angeklickten Oberkategorien.

P.S. Der Hinweis von dir mit dem doppelpunkt <xsl:for-each select="../subcat"> war schon super (ich hatte das mal mit root/ versucht was garnicht ging), nun bekomme ich immer die aktuellen subkategorien angezeigt allerdings unter jeder Oberkategorie.
 
Zuletzt bearbeitet:
Die Anzeige soll wie eine Menü,-Untermenüanzeige ausschauen.

In etwas so:

superior
--firstname, lastname
coWorker

oder

superior
coWorker
--firstname, lastname

Klicke ich also auf eine Oberkategorie übergebe ich die jeweilige kategorieId an ein Script welches mir die Unterkategorien einliest die in der DB mit der KategorieId verknüpft sind.
Gleichzeitig lade ich die Seite neu damit nur die aktuellen Subkategorien im Array sind.
Anzeigen möchte ich das ganze dann, wie du siehst, immer unter den angeklickten Oberkategorien.

P.S. Der Hinweis von dir mit dem doppelpunkt <xsl:for-each select="../subcat"> war schon super (ich hatte das mal mit root/ versucht was garnicht ging), nun bekomme ich immer die aktuellen subkategorien angezeigt allerdings unter jeder Oberkategorie.
Du könntest beim Generieren des XML doch einfach die subcat Elemente unterhalb des gerade aktiven cat Elementes einfügen.

Oder du müßtest mit XSL feststellen können welches das gerade aktive cat Element ist und eine xsl:if Bedingung einbauen, die nur dann die Unterkategorien ausgibt falls in der Schleife gerade das aktive Element aktuell ist.

Gruß
 
Das mit dem if war auch schon meine Überlegung, mal schauen wie ich das am besten umsetzen kann....
 
So ich hab die Lösung:

ich übergebe die aus dem Link übergebene ID nocheinmal an das Template und setze sie dort als variable.
Diese Variable frage ich mit der id der Oberkategorie aus der ersten Schleife ab und führe die Schleife der Unterkategorie nur aus wenn beide Id's gleich sind.

HTML:
<xsl:variable name="ids" select="ids" />


<xsl:if test="$ids = id">
<xsl:for-each select="../subcat"> 
	<div class="under_cat">	
		<xsl:value-of select="subCategory" /><br />
	</div>
</xsl:for-each>
</xsl:if>

Aber danke nochmal für den Tipp mit der Anzeige der Parameter der zweiten Schleife.
 
Zurück