Thomas J.S.: Selektion verschiedener Felder in einem XML Script

Beitrag lesen

Hallo,

Hi, ich habe ein Problem und hoffe, das Ihr mir helfen könnt.
Wenn ich das nun durch ein XSL Stylesheet jage, bekomme ich eine HTML Tabelle, die mir die autos mit den Clicktypes und so untereinander ausgibt. Ich möchte aber eine Tabelle die mir eine Zeile Pro vorhandenem Fahrzeug generiert, also quasi so:

Name        Year        Month        Print        View ...

Fiat Uno    2005        1            15           1

und nicht

Name        Year        Month        ClickType        Clicks ...

Fiat Uno    2005        1            Print            15
Fiat Uno    2005        1            View             1

Mein Problem ist die Selection der einzelnen ClickTypes für die Fahrzeuge, referenziert über die ObjectID und den Monat.

Ich dachte an ein XSL, welches mir folgenden XML Code erzeugt.
<stats>
<statsitem>
    <CountID>1</CountID>
    <Year>2005</Year>
    <Month>1</Month>
    <Name>Fiat UNO</Name>
    <View>1</View>
    <Print>15</Print>
    <TellAFriend>0</TellAFriend>
    <Request>0</Request>
    <ObjectID>1234567</ObjectID>
    <DealerID>12345</DealerID>
</statsitem>
</stats>
Habe aber keine genaue Vorstellung ,wie man das realisieren kann.

Ich hoffe ich konnte mein Problem verdeutlichen

Willst du jetzt XML erzeugen oder HTML??

Beispiel mit folgendem Dummy XML:
----------------------------------
<?xml version="1.0" encoding="iso-8859-1"?>
<stats>
  <statsitem>
    <CountID>1</CountID>
    <Year>2005</Year>
    <Month>1</Month>
    <Name>Fiat UNO</Name>
    <ClickType>View</ClickType>
    <Clicks>1</Clicks>
    <ObjectID>1234567</ObjectID>
    <DealerID>12345</DealerID>
  </statsitem>
  <statsitem>
    <CountID>1</CountID>
    <Year>2005</Year>
    <Month>1</Month>
    <Name>Fiat UNO</Name>
    <ClickType>Print</ClickType>
    <Clicks>15</Clicks>
    <ObjectID>1234567</ObjectID>
    <DealerID>12345</DealerID>
  </statsitem>
  <statsitem>
    <CountID>2</CountID>
    <Year>2005</Year>
    <Month>12</Month>
    <Name>Trabi</Name>
    <ClickType>View</ClickType>
    <Clicks>12</Clicks>
    <ObjectID>12345678</ObjectID>
    <DealerID>12345</DealerID>
  </statsitem>
  <statsitem>
    <CountID>2</CountID>
    <Year>2005</Year>
    <Month>12</Month>
    <Name>Trabi</Name>
    <ClickType>Print</ClickType>
    <Clicks>150</Clicks>
    <ObjectID>12345678</ObjectID>
    <DealerID>12345</DealerID>
  </statsitem>
  <statsitem>
    <CountID>1</CountID>
    <Year>2005</Year>
    <Month>3</Month>
    <Name>Fiat UNO</Name>
    <ClickType>View</ClickType>
    <Clicks>13</Clicks>
    <ObjectID>1234567</ObjectID>
    <DealerID>12345</DealerID>
  </statsitem>
  <statsitem>
    <CountID>1</CountID>
    <Year>2005</Year>
    <Month>3</Month>
    <Name>Fiat UNO</Name>
    <ClickType>Print</ClickType>
    <Clicks>10</Clicks>
    <ObjectID>1234567</ObjectID>
    <DealerID>12345</DealerID>
  </statsitem>
</stats>
-------------------------------

XSL so wie du deine Tabelle beschrieben hast:
(wobei hier nur der Monat das ausschlaggebende Kriterium ist.)
--------------------------------
<?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="fahrzeugtypMonat" match="statsitem" use="Month" />

<xsl:template match="/">
<html>
<head>
 <title>Click und View</title>
</head>
<body>
 <xsl:apply-templates />
</body>
</html>
</xsl:template>

<xsl:template match="stats">
 <table width="600" border="1">
  <tr>
   <td>Name</td>
   <td>Year</td>
   <td>Month</td>
   <td>Print</td>
   <td>View</td>
  </tr>
  <xsl:for-each select="statsitem[generate-id() = generate-id(key('fahrzeugtypMonat', Month)[1])]">
   <xsl:sort select="Name" />
    <tr>
     <td><xsl:value-of select="Name" /></td>
     <td><xsl:value-of select="Year" /></td>
     <td><xsl:value-of select="Month" /></td>
     <xsl:for-each select="key('fahrzeugtypMonat', Month)">
      <td><xsl:value-of select="Clicks" /></td>
     </xsl:for-each>
    </tr>
  </xsl:for-each>
 </table>
</xsl:template>

</xsl:stylesheet>
-------------------------------

Ausgabe in HTML:

-------------------------------
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Click und View</title>
</head>
<body>
<table width="600" border="1">
<tr>
<td>Name</td>
<td>Year</td>
<td>Month</td>
<td>Print</td>
<td>View</td>
</tr>
<tr>
<td>Fiat UNO</td>
<td>2005</td>
<td>1</td>
<td>1</td>
<td>15</td>
</tr>
<tr>
<td>Fiat UNO</td>
<td>2005</td>
<td>3</td>
<td>13</td>
<td>10</td>
</tr>
<tr>
<td>Trabi</td>
<td>2005</td>
<td>12</td>
<td>12</td>
<td>150</td>
</tr>
</table>
</body>
</html>
--------------------------------------

Für die Erklärung vom key und key() knsultiere bitte den Thread http://forum.de.selfhtml.org/archiv/2004/3/t74824/ im Archiv.

Rückfragen dann gerne hier.

Grüße
Thomas