Hallo,
ich habe folgendes Problem: Ich habe eine XML-Datei mit mehreren CDs. Gespeichert sind Daten wie Name, Interpret, Erscheinungsjahr, Kategorie, Preis, etc.
Jetzt möchte ich diese Daten folgendermaßen ausgeben:
- es soll eine Übersicht der aktuellsten CDs geben (also z.B. eine Tabelle mit den CDs die dieses Jahr erschienen sind),
- hier soll es einen link geben über den dann alle CDs angezeigt werden
- es soll eine Detailseite für jede CD geben, die über einen Link aus der Übersicht aufgerufen wird
- soll man bei der Übersicht mit allen CDs auch nur die CDs einer Kategorie anzeigen lassen können
prinzipiell ist das ja alles überhaupt kein Problem, aber alles kombiniert bekomm ich einfach nicht hin. wobei im moment eigentlich mein einziges Problem der Wechsel zwischen den aktuellen und allen CDs ist, die Detailseiten, deren Aufruf und so geht alles.
ich habe mir hier im forum u.a. diese sehr hilfreichen beiträge angesehen: http://forum.de.selfhtml.org/archiv/2005/1/t97848/#m597247 http://forum.de.selfhtml.org/archiv/2006/1/t121401/#m780373
vielleicht ist das ja irgendwie mit einer deser beiden grundlagen realisierbar?
vielen dank schonmal fürs lesen,
Christoph
mein Code bisher: cds.xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml-stylesheet href="cds.xsl" type="text/xsl" ?> <cdliste> <cd> <name>Bravo Hits 1000</name> <art>Sampler</art> <kategorie>POP</kategorie> <jahr>2005</jahr> <preis>50€</preis> <label>soundso</label> <beschreibung>Ein ganz tolles Teil mit vielen tollen Liedern...</beschreibung> <detail id="1"> <detailname>Motiv:</detailname> <detailwert>bla</detailwert> </detail> <detail id="2"> <detailname>Anzahl der CDs:</detailname> <detailwert>5</detailwert> </detail> <detail id="3"> <detailname>Anz Lieder:</detailname> <detailwert>100</detailwert> </detail> <thumb>../images/bravo_hits_1000_t.jpg</thumb> <bild id="1">../images/bravo_hits_1000_1.jpg</bild> <bild id="2">../images/bravo_hits_1000_2.jpg</bild> </cd>
<cd> <name>Viva Best Of 2010</name> <art>Sampler</art> <kategorie>POP</kategorie> <jahr>2010</jahr> <preis>17,0 Mio. EUR</preis> <label>noch ein tolles Label</label> <beschreibung>die besten hits des Jahres auf nur 4 CDs.</beschreibung> <thumb>../images/viva_best_of_2010_t.jpg</thumb> <bild id="1">../images/viva_best_of_2010_1.jpg</bild> </cd> </cdliste>
cds.xsl:
<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <head> <title>cdliste</title> <style type="text/css"> .einzeln { display:none; } h1,h2,p { font-family:Arial,Tahoma,Wide Latin; } h1 { font-size:24px; color:blue; letter-spacing:5px; } h2 { font-size:15px; letter-spacing:3px; line-height:140%; display:inline; padding-left:5px; } p { font-size:11px; letter-spacing:1px; line-height:160%; display:inline; padding-left:8px; text-align:justify; } </style> <script type="text/javascript"> var arrCDs = new Array(<xsl:apply-templates select="cdliste" mode="jsarray" />); var alleCDs = "<xsl:value-of select="generate-id(cdliste)" />"; <![CDATA[ function displayLayer(strID) { document.getElementById(strID).style.display = "block"; }
function hideLayer(strID) { document.getElementById(strID).style.display = "none"; }
function showCD(strID) { for(i=0; i<=arrCDs.length-1; i++) { if(arrCDs[i] != strID) { hideLayer(arrCDs[i]); } else displayLayer(strID); } } ]]> </script> </head> <body> <xsl:apply-templates select="cdliste" mode="alle" /> <xsl:apply-templates select="cdliste" mode="einzeln" /> </body> </html> </xsl:template>
<xsl:template match="cdliste" mode="alle"> <div id="{generate-id(.)}"> <h1>Alle CDs</h1> <table width="600" border="0" cellpadding="0" cellspacing="0"> <colgroup> <col width="25%" /> <col width="25%" /> <col width="25%" /> <col width="25%" /> </colgroup> <xsl:for-each select="cd"> <xsl:sort select="jahr" order="descending" /> <xsl:apply-templates select="." mode="alle"/> </xsl:for-each> </table> </div> </xsl:template>
<xsl:template match="cdliste" mode="aktuelle"> <div id="{generate-id(.)}"> <h1>Aktuelle CDs</h1> <table width="600" border="0" cellpadding="0" cellspacing="0"> <colgroup> <col width="25%" /> <col width="25%" /> <col width="25%" /> <col width="25%" /> </colgroup> <xsl:for-each select="cd"> <xsl:sort select="jahr" order="descending" /> <xsl:apply-templates select=".[jahr='2006']" mode="alle"/> </xsl:for-each> </table> </div> </xsl:template>
<xsl:template match="cd" mode="alle"> <xsl:variable name="ID" select="generate-id(.)" /> <tr> <td colspan="4"><h2><a href="#" onclick="hideLayer(alleCDs);showCD('{$ID}');"><xsl:value-of select="name"/></a></h2></td> </tr> <tr> <td> <xsl:apply-templates select="thumb"/> </td> <td> <p><b>JAHR:</b></p><br/><p><xsl:value-of select="jahr" /></p> </td> <td> <p><b>PREIS:</b></p><br/><p><xsl:value-of select="preis" /></p> </td> <td> <p><b>LABEL:</b></p><br/><p><xsl:value-of select="label" /></p> </td> </tr> <tr> <td colspan="4" height="20"></td> </tr> </xsl:template>
<xsl:template match="thumb"> <img align="left"> <xsl:attribute name="src"><xsl:value-of select="."/></xsl:attribute> </img> </xsl:template>
<xsl:template match="cdliste" mode="einzeln"> <xsl:apply-templates select="cd" mode="einzeln" /> </xsl:template>
<xsl:template match="cd" mode="einzeln"> <div id="{generate-id(.)}" class="einzeln"> <h1><xsl:value-of select="name"/></h1> <table width="600" border="0" cellpadding="0" cellspacing="0"> <colgroup> <col width="200" /> <col width="200" /> <col width="200" /> </colgroup> <tr> <td colspan="2" align="left"><img><xsl:attribute name="src"><xsl:value-of select="bild[@id='1']"/></xsl:attribute></img></td> <td valign="middle"> <h2>Art:</h2><br/> <p><xsl:value-of select="art"/></p><br/> <h2>Jahr:</h2><br/> <p><xsl:value-of select="jahr"/></p><br/> <h2>Preis:</h2><br/> <p><xsl:value-of select="preis"/></p><br/> <h2>Label:</h2><br/> <p><xsl:value-of select="label"/></p><br/> </td> </tr> <tr> <td colspan="3" height="20"></td> </tr> <tr> <td valign="middle"> <h2>Beschreibung:</h2><br/> <p><xsl:value-of select="beschreibung"/></p> </td> <td colspan="2" align="right"><img><xsl:attribute name="src"><xsl:value-of select="bild[@id='2']"/></xsl:attribute></img></td> </tr> <tr> <td colspan="3" height="20"></td> </tr> <tr> <td colspan="2" align="left"><img><xsl:attribute name="src"><xsl:value-of select="bild[@id='3']"/></xsl:attribute></img></td> <td valign="middle"> <xsl:for-each select="detail"> <h2><xsl:value-of select="detailname"/></h2><br/> <p><xsl:value-of select="detailwert"/></p><br/> </xsl:for-each> </td> </tr> <tr> <td></td> <td colspan="2" align="right"><img><xsl:attribute name="src"><xsl:value-of select="bild[@id='4']"/></xsl:attribute></img></td> </tr> </table> <p> <a href="#" onclick="hideLayer('{generate-id(.)}');displayLayer(alleCDs);">Tabelle Anzeigen</a> </p> </div> </xsl:template>
<xsl:template match="cdliste" mode="jsarray"> <xsl:for-each select="cd"> xsl:text"</xsl:text><xsl:value-of select="generate-id(.)" />xsl:text"</xsl:text><xsl:if test="position() != last()">xsl:text, </xsl:text></xsl:if> </xsl:for-each> </xsl:template>
</xsl:stylesheet>