Hallo,
Jetzt spuckt er alles aus, was er hat, selbst die Elemente, die garkein match haben.
Jedes Konten eines XML hat ein Template. Bei dir greifen genau diese so geannte build-in Templates, denn du hast paar sachen in deinem XSL vergessen.
Für Elemente für die du kein Template definert hast, greift das biul-in Template. Du hast ein Template für /produktliste/produkt[id='ID1'] deshalb wird es auch mit dem blauen Rahmen dargestellt, für die anderen <produkt>-Elemente gilt also das buil-in (ebenso für das Wurzelknoten).
Diese werden also auch ausgegeben, aber ohne den Rahmen.
Für <id> und <autor> hast du ein Template, deshalb werden sie in allen Fällen entsprechend formatiert ausgegeben. Für <titel> und <preis> greifen wiederum die build-in Templates und auch diese Elemente werden ausgegeben.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="html"/>
<xsl:template match="/produktliste/produkt[id='ID1']">
<h1>Produkte</h1>
<div style="border:1px solid blue">
xsl:apply-templates/
</div>
</xsl:template><xsl:template match="id">
<div><i>ID:</i>xsl:apply-templates/</div>
</xsl:template><xsl:template match="autor">
<div style="background-color:#F34;"><b>Autor: </b>
xsl:apply-templates/
</div>
</xsl:template></xsl:stylesheet>
>
Und so siehst das "HTML" was du erzeugst dann aus:
<h1>Produkte</h1>
<div style="border:1px solid blue">
<div><i>ID:</i>ID1</div>Titel1<div style="background-color:#F34;"><b>Autor: </b>Autor1</div>Preis1</div>
<div><i>ID:</i>ID2</div>Titel2<div style="background-color:#F34;"><b>Autor: </b>Autor2</div>Preis2<div><i>ID:</i>ID3</div>Titel3<div style="background-color:#F34;"><b>Autor: </b>Autor3</div>Preis3<div><i>ID:</i>ID4</div>Titel4<div style="background-color:#F34;"><b>Autor: </b>Autor4</div>Preis4
Also muss du dafür sorgen, dass sowohl dein XSL als auch dein HTML richtig ist:
\---------------------------------------
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/produktliste">
<html>
<head>
<title>Prduktliste</title>
</head>
<body>
<xsl:apply-templates select="produkt[id='ID1']" />
</body>
</html>
</xsl:template>
<xsl:template match="produkt">
<h1>Produkte</h1>
<div style="border:1px solid blue">
<xsl:apply-templates/>
</div>
</xsl:template>
<xsl:template match="id">
<div><i>ID:</i><xsl:value-of select="." /></div>
</xsl:template>
<xsl:template match="autor">
<div style="background-color:#F34;"><b>Autor: </b>
<xsl:value-of select="." />
</div>
</xsl:template>
<xsl:template match="titel | preis" />
</xsl:stylesheet>
\-----------------------------------------------
Und so sieht dann die Ausgabe dazu:
\-----------------------------------
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Prduktliste</title>
</head>
<body>
<h1>Produkte</h1>
<div style="border:1px solid blue">
<div><i>ID:</i>ID1</div>
<div style="background-color:#F34;"><b>Autor: </b>Autor1</div>
</div>
</body>
</html>
\-----------------------------------
> > Wenn du das ganze mit serverseitiger Technologie lösen kannst oder willst, muss du einfach das Formular mittels XSLT erzeugen.
>
> Das Formular mittes XSLT? Kommt da denn was anderes raus, beim senden an den Server, als bei einem "normalen" Formular.
>
Es ist ein normales Formular, denn am Ende hast du ja "nur" HTML. Aber du erzeugst dieses HTML in der Transformation, also muss du im XSLT deinen Code so gestalten, dass am Ende, das HTML steht, das du eben normal verwenden kannst.
Grüße
Thomas