Hallo,
ich fange gerade mit xslt an - ist ein spannendes Thema. Ich möchte eine generierte .xml-Liste im Browser anzeigen lassen, die ich "on-the-fly" per xsl transformieren lasse. Dabei sollen nur Listeneinträge angezeigt werden, deren <attr2> nicht in einer zweiten .xml-Datei als <ausschluss> deklariert ist.
Hier mal eine Demo mit Deinen Daten: http://www.christian-seiler.de/temp/forum-20080425-daten.xml
Sourcecode des Stylesheets:
http://www.christian-seiler.de/temp/forum-20080425-stylesheet.xsl
Das wichtigste Stichwort ist hier document() - das lädt ein externes Dokument nach. Außerdem muss man hier mit mindestens einer Variable (in diesem Fall $aktion) arbeiten:
<xsl:variable name="aktion" select="attr2" />
<xsl:if test="count($ausschluesse/ausschluss[. = $aktion]) = 0">
(Das $ausschluesse habe ich hier nur zur Übersicht drin, da könnte direkt docuemnt(...)/... stehen)
Im Prinzip könnte man meinen, dass ein count($ausschluesse/ausschluss[. = attr2]) ausreichen sollte. Das funktioniert aber nicht, da in dem Qualifier (also den eckigen Klammern) der Kontext des Elements ausschluss im anderen Dokument gilt - und dort gibt es kein Kindelement attr2. Daher muss man das Element attr2 aus dem aktuellen Kontext in eine Variable kopieren, um es dann im XPath-Ausdruck verwenden zu können.
Im Prinzip würde sich für so eine Aufgabe auch <xsl:key /> anbieten. Das hat allerdings ein großes Problem: Es funktioniert (bei XSLT 1.0) nur für Knoten im aktuellen Dokument, d.h. wenn man ein externes Dokument nachlädt, kann man darauf keinen Key anwenden. XSLT 2.0 würde so etwas anbieten, aber das können die Browser ja nicht.
Viele Grüße,
Christian