Template für das Durchsuchen von Kindknoten

uwe75-1

Mitglied
Hallo,

ich habe eine XNL Datei, welche einen Verzeichnisbaum wiederspiegelt. Wie diese Verzeichnisse auf der Website dargestellt werden soll hängt von mehren Faktoren ab, z.B.:
-besitzt das Verzeichnis Dateien
-besitzt es weitere Unterverzeichnisse
-hat der angemeldete User Zugriffsrechte auf das Verzecihnis, dabei besteht die Möglichkeit, das der User kein Zugriff auf die Dateien des aktuellen Verzeichnis (Kontextknoten) hat, wohl aber auf Dateien evtl. darunter liegener Verzeichnisse. In diesem Fall müßte das aktuelle Verzeichnis (Kontextknoten) dargestellt werden, aber nicht dessen Dateien, da der User in die berechtigten Untervezeichnisse gelangen muß.

Meine XML Datei beschreibt eindeutig, ob ein Verzeichnis, Subdirs, Files besitzt und ob der User eine Berechtigung hat, die Files der einzelnen Verzeichnisse einzusehen - mit Hilfe von Attributen.

Meine Idee ist nun folgende:
Ausgehend von einem Kontextknoten muß geprüft werden, ob irgendein Kindknoten(mittelbare und unmittelbare) Berechtigung des Users zu läßt, dann muß das Template ausgeführt werden für alle Kindknoten bis zu dem Kindknoten mit der Berechtigung.

Hat da jemand eine Idee, wie so ein Pattern für die Template match Anweisung lauten müßte?

Vielen Dank im Voraus für eure Hilfe

Uwe
 
Hallo, ich habe eine XNL Datei, welche einen Verzeichnisbaum wiederspiegelt...
Hallo,

ich vermute mal, dass deine XML-Datei aus Verzeichnis- und Datei-Elementen besteht. Etwa so:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<directory name="root">
	<file name="f0"/>
	<file name="f1" permission="yes" />
	<directory name="dir1">
		<file name="f2" />
	</directory>
	<directory name="dir2">
		<file name="f3" />
		<directory name="dir21">
			<file name="f4" />
			<directory name="dir211">
				<file name="f5" permission="yes" />
				<file name="f6" />
			</directory>
		</directory>
		<directory name="dir22">
			<directory name="dir221">
				<file name="f7" permission="yes" />
			</directory>
			<directory name="dir222">
				<file name="f8" />
				<directory name="dir2221">
					<file name="f9" />
				</directory>
				<directory name="dir2222" />
			</directory>
		</directory>
	</directory>
</directory>
Mit den "permission"-Attributen wird im obigen Beispiel den Dateien f1, f5 und f7 eine Zugriffserlaubnis verpasst. Wenn ich deinen Beitrag richtig verstanden habe, dann willst du alle Dateien ohne Zugriffsberechtigung und die zugehörigen Verzeichnisse ausfiltern, so dass im Ausgabebaum nur noch die Dateien mit Zugriffsberechtigung und die entsprechenden Verzeichnisse dargestellt werden.
Das müsste m.E. möglich sein, indem du nur Verzeichnisse mit mindestens einem Datei-Element mit Zugriffsberechtigung als Nachfolger und auch nur solche Dateielemente in den Ausgabebaum kopierst:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" indent="yes" />

	<xsl:template match="@*|node()">
		<xsl:copy>
			<xsl:apply-templates select="@*|node()" />
		</xsl:copy>
	</xsl:template>

	<xsl:template match="file[not(@permission='yes')]" />
	<xsl:template match="directory[count(descendant::file[@permission='yes'])=0]" />

</xsl:stylesheet>
Das Transformationsergebnis sieht dann so aus:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<directory name="root">
	<file name="f1" permission="yes" />
	<directory name="dir2">
		<directory name="dir21">
			<directory name="dir211">
				<file name="f5" permission="yes" />
			</directory>
		</directory>
		<directory name="dir22">
			<directory name="dir221">
				<file name="f7" permission="yes" />
			</directory>
		</directory>
	</directory>
</directory>
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank für die sehr ausführliche Hilfe. Bin zwar noch ein bißchen am Tüfteln, so wie ich das exakt haben möchte, aber Du hast mich ein ganzes Stück nach vorn katapultiert******
Echt Super Hlilfe!!
 
Zurück