Hallo Janine,
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?
Das klappt mit etwas Umschreibung der vorherigen Transformation:
<?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:variable name="ids"
select="distinct-values(for $id in allids/id return substring($id, 1, 3))"/>
<list>
<xsl:for-each select="gebiete/gebiet">
<xsl:variable name="aktgeb" select="."/>
<xsl:if test="index-of($ids, $aktgeb) ge 1">
<gebiet>
<xsl:value-of select="$aktgeb"/>
</gebiet>
</xsl:if>
</xsl:for-each>
</list>
</xsl:template>
</xsl:stylesheet>
Ergebnis:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<gebiet>010</gebiet>
<gebiet>020</gebiet>
</list>
Die Belegung der Variable $ids ist hier etwas spezieller. Das for-in-return-Konstrukt liefert zunächst von allen IDs die ersten drei Zeichen und distinct-values() beschränkt das Ergebnis auf die individuellen Werte, also: ('010', '020'). Die weitere Verarbeitung läuft dann wie gehabt, nur ohne not().
Grüße,
Thomas