Hierachien mit XSL bearbeiten

IrmaT

Grünschnabel
Hallo,

ich bin absoluter Neuling und muss eine XML-Datei als Textdatei ausgeben.
Der Input sieht so aus

<Folder>
<Name>Alpha</Name>
<Berechtigung>
<Name>Otto</Name>
<Typ>read</Typ>
</Berechtigung>
<Berechtigung>
<Name>Willi</Name>
<Typ>none</Typ>
</Berechtigung>
...
</Folder>
<Folder>
<Name>Test</Name>
<Berechtigung>
<Name>Anna</Name>
<Typ>read/write</Typ>
</Berechtigung>
<Berechtigung>
<Name>Willi</Name>
<Typ>none</Typ>
</Berechtigung>
</Folder>
...

herauskommen soll etwas in der Art

Folder Berechtigung
Alpha Otto read
Alpha Willi none
...
Test Anna read/write
Test Willi none
...


Mein Ansatz funktioniert nicht:
<xsl:template match="/">
<html>
<body>
<h2>Folder - Berechtigungen </h2>
<table border="1">
<tr>
<th align="left">Folder</th>
<th align="left">Berechtigung</th>
</tr>
<xsl:for-each select="Folder">
<tr>
<td><xsl:value-of select="Name"/></td>
<td><table>
<xsl:for-each select="Berechtigung">
<tr>
<td><xsl:value-of select="Name"/></td>
<td><xsl:value-of select="Typ"/></td>
</xsl:for-each>
</tr>
</table>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>


Wäre froh, wenn mir jemand auf die Spünge helfen könnte.

Grüße
Irma
 
Hallo
xml ist keine Programmiersprache in üblichen Sinne

xsl:for-each nur für node set benutzen

sonst nur mit Template benutzen

zum testen habe noch ein root tag eingesetzt


Code:
<?xml version="1.0" encoding="UTF-8"?>

<root>
	<Folder>
		<Name>Alpha</Name>
		<Berechtigung>
			<Name>Otto</Name>
			<Typ>read</Typ>
		</Berechtigung>
		<Berechtigung>
			<Name>Willi</Name>
			<Typ>none</Typ>
		</Berechtigung>
</Folder>
	<Folder>
		<Name>Test</Name>
		<Berechtigung>
			<Name>Anna</Name>
			<Typ>read/write</Typ>
		</Berechtigung>
		<Berechtigung>
			<Name>Willi</Name>
			<Typ>none</Typ>
		</Berechtigung>
	</Folder>
</root>

Code:
<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" indent="yes"/>
	<xsl:template match="/">
		<html>
			<body>
				<h2>Folder - Berechtigungen </h2>
				<table border="1">
					<tr>
						<th>Name</th>
						<th>Berechtigung</th>
						<th>Vorname</th>
					</tr>
					<xsl:apply-templates select="//Folder"/>
				</table>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="Folder">
		<tr>
			<td>
				<xsl:value-of select="Name"/>
			</td>
			<td>
				<xsl:value-of select="Berechtigung/Typ"/>
			</td>
			<td>
				<xsl:value-of select="Berechtigung/Name"/>
			</td>
		</tr>
	</xsl:template>
</xsl:stylesheet>

mit for-each
Code:
<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" indent="yes"/>
	<xsl:template match="/root">
		<html>
			<body>
				<h2>Folder - Berechtigungen </h2>
				<table border="1">
					<tr>
						<th>Name</th>
						<th>Berechtigung</th>
						<th>Vorname</th>
					</tr>
					<xsl:for-each select="Folder">
						<tr>
							<td>
								<xsl:value-of select="Name"/>
							</td>
							<td>
								<xsl:value-of select="Berechtigung/Typ"/>
							</td>
							<td>
								<xsl:value-of select="Berechtigung/Name"/>
							</td>
						</tr>
					</xsl:for-each>
				</table>
			</body>
		</html>
	</xsl:template>
</xsl:stylesheet>


gut zu verstehen und nach lesen
http://zvon.org/index.php?nav_id=tutorials&mime=html
 
kleiner fehler behoben
noch ein template mehr dazu

name ein Tag zurück mit ../name
berechtigung löschen da es im template berichtigung ist

Code:
<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="html" indent="yes"/>
	<xsl:template match="/">
		<html>
			<body>
				<h2>Folder - Berechtigungen </h2>
				<table border="1">
					<tr>
						<th>Name</th>
						<th>Berechtigung</th>
						<th>Vorname</th>
					</tr>
					<xsl:apply-templates select="//Folder"/>
				</table>
			</body>
		</html>
	</xsl:template>
	<xsl:template match="Folder">
		<xsl:apply-templates select="Berechtigung"/>
	</xsl:template>
	<xsl:template match="Berechtigung">
		<tr>
			<td>
				<xsl:value-of select="../Name"/>
			</td>
			<td>
				<xsl:value-of select="Typ"/>
			</td>
			<td>
				<xsl:value-of select="Name"/>
			</td>
		</tr>
	</xsl:template>
</xsl:stylesheet>
 

Neue Beiträge

Zurück