Hallo zusammen,
ich bin noch ziemlich neu auf dem Gebiet PHP und muss für ne Klausur folgende Übungsaufgabe lösen:
Wir sollen eine XML-Datei mit verschiedenen Autodaten anlegen.
Die hab ich auch schon erstellt (siehe unten).
Nun sollen mitteln PHP erst alle Maseratis rausgefiltert werden und deren Daten zeilenweise innerhalb einer Tabelle ausgegeben werden.
Jeder Maserati hat dann einen eigenen Link. Wenn man auf diesen Link klickt sollen nur noch die Daten dieses Maseratis ausgegeben werden. Diese Daten sollen dann auf einer neuen Seite (also die Gesamtübersicht soll verschwinden) in einem vertikalen Tabellenlayout angezeigt werden.
Das hab ich mittels XML, XSL und JavaScript jetzt so gelöst:
XML-Code:
XSL-Code:
[code]<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="markenauswahl" match="auto" use="marke" />
<xsl:template match="/">
<html>
<head>
<title>Autoliste</title>
<style type="text/css">
.einzeln { display:none; }
.markentabelle { display:none; }
th
{
background-color: #B4CEA7;
}
.spalte
{
background-color: #B4CEA7;
font-weight: bold;
width=140;
}
.daten
{
background-color: #F7F9C1;
width=100;
}
</style>
<script type="text/javascript">
var arrAutos = new Array(<xsl:apply-templates select="autos" mode="jsarray" />);
var arrAutosTabelle = new Array(<xsl:apply-templates select="autos" mode="markejsarray" />);
<![CDATA[
function displayLayer(strID)
{
document.getElementById(strID).style.display = "block";
}
function hideLayer(strID)
{
document.getElementById(strID).style.display = "none";
}
function showAuto(strArrayName, strID)
{
for(i=0; eval("i<= " + strArrayName + ".length-1"); i++)
{
if(eval(strArrayName + "[i] != strID"))
{
hideLayer(eval(strArrayName + "[i]"));
}
else
displayLayer(strID);
}
}
function hideSingleAutos() {
for(i=0; i<=arrAutos.length-1; i++) {
hideLayer(arrAutos[i]);
}
}
]]>
</script>
</head>
<body>
<form action="#">
<select onchange="showAuto('arrAutosTabelle', this.form.markenauswahl.options[this.form.markenauswahl.selectedIndex].value); hideSingleAutos();" name="markenauswahl">
<option>Wählen Sie eine Marke</option>
<xsl:for-each select="autos/auto[generate-id() = generate-id(key('markenauswahl', marke)[1])]">
<xsl:sort select="marke" />
<option value="marke_{generate-id()}"><xsl:value-of select="marke" /></option>
</xsl:for-each>
</select>
</form>
<xsl:apply-templates select="autos" mode="alle" />
<xsl:apply-templates select="autos" mode="einzeln" />
</body>
</html>
</xsl:template>
<xsl:template match="autos" mode="alle">
<xsl:for-each select="auto[generate-id() = generate-id(key('markenauswahl', marke)[1])]">
<xsl:variable name="strLayerID" select="generate-id()" />
<xsl:variable name="automarke" select="marke" />
<div id="marke_{generate-id(.)}" class="markentabelle">
<h1>Autoliste</h1>
<p/>
<table border="1">
<tr>
<th>Nr.</th>
<th>Foto</th>
<th>Marke</th>
<th>Modell</th>
<th>Preis</th>
<th>Adresse</th>
<th>PS</th>
<th>Erstzulassung</th>
<th>Bauart</th>
<th>Farbe</th>
<th>Kilometerleistung</th>
<th>Extras</th>
</tr>
<xsl:apply-templates select="key('markenauswahl', $automarke)" mode="alle">
<xsl:with-param name="strLayerID" select="$strLayerID" />
</xsl:apply-templates>
</table>
</div>
</xsl:for-each>
</xsl:template>
<xsl:template match="auto" mode="alle">
<xslaram name="strLayerID" />
<xsl:variable name="ID" select="generate-id(.)" />
<tr>
<td>
<xsl:number format="1"/>
</td>
<td>
<xsl:apply-templates select="foto"/>
</td>
<td align="center" width="90">
<a href="#" onclick="hideLayer('marke_{$strLayerID}');showAuto('arrAutos', '{$ID}');"><xsl:value-of select="marke" /></a>
</td>
<xsl:apply-templates select="modell | preis" mode="alle"/>
<xsl:apply-templates select="adresse" mode="alle"/>
<xsl:apply-templates select="ps | EZ | art | farbe | kilometer | extras" mode="alle"/>
</tr>
</xsl:template>
ich bin noch ziemlich neu auf dem Gebiet PHP und muss für ne Klausur folgende Übungsaufgabe lösen:
Wir sollen eine XML-Datei mit verschiedenen Autodaten anlegen.
Die hab ich auch schon erstellt (siehe unten).
Nun sollen mitteln PHP erst alle Maseratis rausgefiltert werden und deren Daten zeilenweise innerhalb einer Tabelle ausgegeben werden.
Jeder Maserati hat dann einen eigenen Link. Wenn man auf diesen Link klickt sollen nur noch die Daten dieses Maseratis ausgegeben werden. Diese Daten sollen dann auf einer neuen Seite (also die Gesamtübersicht soll verschwinden) in einem vertikalen Tabellenlayout angezeigt werden.
Das hab ich mittels XML, XSL und JavaScript jetzt so gelöst:
XML-Code:
Code:
<?xml version="1.0"?> <?xml-stylesheet href="autos_xsl.xsl" type="text/xsl" ?> <autos> <auto> <marke xml:link="simple" naechster="Maserati" href="mas1.xml">Maserati</marke> <modell>Biturbo Coupé</modell> <foto quelle="Maserati1.jpg"></foto> <foto2 quelle="Maserati1_gross.jpg"></foto2> <preis>EUR 1.111</preis> <adresse> <name>Helmut Müller</name> <strasse>Schustereck 5</strasse> <plz>66709</plz> <ort>Rappweiler</ort> </adresse> <ps>75</ps> <EZ>06/1984</EZ> <art>Coupé</art> <farbe>schwarz</farbe> <kilometer>100.000km</kilometer> <extras>keine</extras> <kraftstoff>Benzin</kraftstoff> <getriebe>Automatik</getriebe> </auto> <auto> <marke xml:link="simple" naechster="Audi" href="audi.xml">Audi</marke> <modell>Audi A8</modell> <foto quelle="Audi.jpg"></foto> <foto2 quelle="Audi_gross.jpg"></foto2> <preis>EUR 12.000</preis> <adresse> <name>Donald Duck</name> <strasse>Feldweg 3</strasse> <plz>54621</plz> <ort>Entenhausen</ort> </adresse> <ps>125</ps> <EZ>10/2001</EZ> <art>4-Türer</art> <farbe>silber</farbe> <kilometer>40.000km</kilometer> <extras>Klimaanlage <extra>Automatik</extra> <extra>Nebelscheinwerfer</extra> <extra>Sitzheizung</extra> </extras> <kraftstoff>Benzin</kraftstoff> <getriebe>Handschaltung</getriebe> </auto> <auto> <marke xml:link="simple" naechster="Maserati" href="mas2.xml">Maserati</marke> <modell>Maserati Sportswagon</modell> <foto quelle="Maserati2.jpg"></foto> <foto2 quelle="Maserati2_gross.jpg"></foto2> <preis>EUR 87.000</preis> <adresse> <name>Fred Feuerstein</name> <strasse>Steinbruch 5</strasse> <plz>66679</plz> <ort>Losheim am See</ort> </adresse> <ps>340</ps> <EZ>05/2005</EZ> <art>Cabrio</art> <farbe>blau</farbe> <kilometer>25.000km</kilometer> <extras>Klimaanlage <extra>Automatik</extra> <extra>Nebelscheinwerfer</extra> <extra>Sitzheizung</extra> <extra>Ledersitze</extra> </extras> <kraftstoff>Benzin</kraftstoff> <getriebe>Handschaltung</getriebe> </auto> </autos>
[code]<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="markenauswahl" match="auto" use="marke" />
<xsl:template match="/">
<html>
<head>
<title>Autoliste</title>
<style type="text/css">
.einzeln { display:none; }
.markentabelle { display:none; }
th
{
background-color: #B4CEA7;
}
.spalte
{
background-color: #B4CEA7;
font-weight: bold;
width=140;
}
.daten
{
background-color: #F7F9C1;
width=100;
}
</style>
<script type="text/javascript">
var arrAutos = new Array(<xsl:apply-templates select="autos" mode="jsarray" />);
var arrAutosTabelle = new Array(<xsl:apply-templates select="autos" mode="markejsarray" />);
<![CDATA[
function displayLayer(strID)
{
document.getElementById(strID).style.display = "block";
}
function hideLayer(strID)
{
document.getElementById(strID).style.display = "none";
}
function showAuto(strArrayName, strID)
{
for(i=0; eval("i<= " + strArrayName + ".length-1"); i++)
{
if(eval(strArrayName + "[i] != strID"))
{
hideLayer(eval(strArrayName + "[i]"));
}
else
displayLayer(strID);
}
}
function hideSingleAutos() {
for(i=0; i<=arrAutos.length-1; i++) {
hideLayer(arrAutos[i]);
}
}
]]>
</script>
</head>
<body>
<form action="#">
<select onchange="showAuto('arrAutosTabelle', this.form.markenauswahl.options[this.form.markenauswahl.selectedIndex].value); hideSingleAutos();" name="markenauswahl">
<option>Wählen Sie eine Marke</option>
<xsl:for-each select="autos/auto[generate-id() = generate-id(key('markenauswahl', marke)[1])]">
<xsl:sort select="marke" />
<option value="marke_{generate-id()}"><xsl:value-of select="marke" /></option>
</xsl:for-each>
</select>
</form>
<xsl:apply-templates select="autos" mode="alle" />
<xsl:apply-templates select="autos" mode="einzeln" />
</body>
</html>
</xsl:template>
<xsl:template match="autos" mode="alle">
<xsl:for-each select="auto[generate-id() = generate-id(key('markenauswahl', marke)[1])]">
<xsl:variable name="strLayerID" select="generate-id()" />
<xsl:variable name="automarke" select="marke" />
<div id="marke_{generate-id(.)}" class="markentabelle">
<h1>Autoliste</h1>
<p/>
<table border="1">
<tr>
<th>Nr.</th>
<th>Foto</th>
<th>Marke</th>
<th>Modell</th>
<th>Preis</th>
<th>Adresse</th>
<th>PS</th>
<th>Erstzulassung</th>
<th>Bauart</th>
<th>Farbe</th>
<th>Kilometerleistung</th>
<th>Extras</th>
</tr>
<xsl:apply-templates select="key('markenauswahl', $automarke)" mode="alle">
<xsl:with-param name="strLayerID" select="$strLayerID" />
</xsl:apply-templates>
</table>
</div>
</xsl:for-each>
</xsl:template>
<xsl:template match="auto" mode="alle">
<xslaram name="strLayerID" />
<xsl:variable name="ID" select="generate-id(.)" />
<tr>
<td>
<xsl:number format="1"/>
</td>
<td>
<xsl:apply-templates select="foto"/>
</td>
<td align="center" width="90">
<a href="#" onclick="hideLayer('marke_{$strLayerID}');showAuto('arrAutos', '{$ID}');"><xsl:value-of select="marke" /></a>
</td>
<xsl:apply-templates select="modell | preis" mode="alle"/>
<xsl:apply-templates select="adresse" mode="alle"/>
<xsl:apply-templates select="ps | EZ | art | farbe | kilometer | extras" mode="alle"/>
</tr>
</xsl:template>
Kommentar