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"/>
...