Thomas J.S.: mit xsl im xml nach elementen mit attributen suchen und ausgeben

Beitrag lesen

Hallo,

Hallo Thomas, danke für die schnelle Antwort und ich habe mir nochmal Mühe gegeben ;-) danach schaut die xml datei so aus:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<datum>
<bestellung booking="BFV100" />
<schuhe booking="BFV100">niko</schuhe>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head/>
<form>
<xsl:if test="*[@booking='BFV100']">
<body>

Wenn ich nun die beiden parsen, dann sollten doch jetzt eigentlich zumindest für die elemente schuhe und jacke mit booking="BFV100" angezeigt werden, es wird aber bi mir überhaupt nichts an Wert angezeigt, wo ist da mein denkfehler?

Bei zwei Dingen hast du einen Fehler gemacht:
a) bei deinem HTML: <form> steht zwischen <head> und <body>, das geht schon mal in HTML gar nicht. Stelle dann auch dein if-Abfrage innerhalb von <body>.
b) bei deinem XSL:

<xsl:template match="/"> trifft den Dokumentknoten, was das gesamte Dokument enthält:
/(dok.knoten)
--wurzelelement/(<root>)
               --anderes element/ (z.B. datum, bestellung etc.)

Du bist also mit
<xsl:template match="/"> noch _vor_ deinem Wurzelelement und nun versuchst du ein Element mit dem Attribut @booking='BFV100' zu finden, das natürlich nicht auf diese Ebene gibt.

Du kannst es entweder so: <xsl:template match="/root"> machen und dann reicht auch nur ein <xsl:value-of select="pullover"/> etc.

Oder so:

<xsl:template match="/">
<html>
<head>
 <title>Untitled</title>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="root">
<xsl:if test="*[@booking ... ]">
<form>
...
<xsl:value-of select="hose" />
...
</form>
</xsl:if>
</xsl:template>

oder nach dem du die HTML-Struktur korrigiert hast auch einfach die Abfrage richtigstellen:
<xsl:if test="root/*[@booking='BFV100']">

Grüße
Thomas