Janine S.: Variablen und Schleifen - Kopfknotenalarm!

Beitrag lesen

Hallo Thomas (und alle anderen),

da bin ich noch einmal mit einem letzten Knoten (danach reichts aber auch!):

Ausgangs-XML ist wieder:

<list>
	<gebiete>
		<gebiet>010</gebiet>
		<gebiet>020</gebiet>
		<gebiet>030</gebiet>
		<gebiet>040</gebiet>
	</gebiete>
	<allids>
		<id>010001</id>
		<id>010002</id>
		<id>010003</id>
		<id>020001</id>
		<id>020002</id>
	</allids>
</list>

Doch diesmal will ich die Gebiete ausgeben, die auch zugehörige IDs besitzen (also nur 010 und 020).

Mein Code sieht bisher so aus:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
	<xsl:template match="list">
		<xsl:for-each select="gebiete/gebiet">
			<xsl:variable name="geb" select="."/>
			<xsl:if test="substring(allids/id, 1, 3) = $geb">
				<p>
					<xsl:value-of select="$geb"/>
				</p>
			</xsl:if>
		</xsl:for-each>
	</xsl:template>
</xsl:stylesheet>

Doch es wird keine Ausgabe erzeugt. Die Fehlermeldung meint, dass "A sequence of more than one item is not allowed as the first argument of fn:substring() ("000010", "000020", ...) " Muss ich da mit verschachtelten Schleifen arbeiten oder auch hier einfach alle allids/id in eine Variable schreiben, um sie als Sequenz einzulesen?

Viele Grüße

Janine

PS: fn:starts-with(allids/id, $geb) funktioniert leider genausowenig wie die Definition der <xsl:variable name="ids" select"allids/id"/>...