bernd: Nodes über ein Attribut zusammenfassen

Beitrag lesen

Hallo,

kleine Aufgabe, großes Problem (für mich). Aus einer XML-Datei soll via XSL ein
HTML-Dokument mit einer Tabelle erzeugt werden. Das ganze geschieht in einer
ASP-Seite, was aber nicht von Bedeutung ist. Die Daten (XML) kommen aus einer
Datenbank, sprich werden über ein ADODB.Recordset in das XML-Dokument geschrieben.
Soll bedeuten, dass ich das Ausgabeformat der XML-Datei nicht beeinflussen kann nur
die XSL-Datei kann ich ändern.

Ich habe diese XML-Datei mal bereinigt und als test.xml abgespeichert (siehe unten).
Jetzt das Problem, die Daten liegen so vor, dass zusammengehörige "Datensätze"
über ein Attribut (parentid) bestimmt werden können.

Mein Gedanke ist, die book-Nodes so zu selektieren, dass ich eine Art Set/Collection bekomme.
Leider weiss ich nicht wie ich das bewerkstelligen soll.
Gibt es eine Möglichkeit die book-Nodes mit gleicher parentid irgendwie zusammenzufassen,
so dass ich diese tabellarisch darstellen kann?

test.asp

<%@ LANGUAGE = JScript%>
<%
  var xml = Server.CreateObject("Msxml2.DOMDocument");
  var xsl = Server.CreateObject("Msxml2.DOMDocument");

xml.load(Server.MapPath("test.xml"));
  xsl.load(Server.MapPath("style.xsl"));
  xml.transformNodeToObject(xsl, Response);
%>

test.xml, Daten kommen aus Datenbank

<?xml version="1.0"?>
<catalog>
   <book id="1" parentid="100" attr="titel"  wert="Inside COM+"/>
   <book id="2" parentid="100" attr="isbn"   wert="3-86063-498-4"/>
   <book id="3" parentid="100" attr="verlag" wert="Microsoft Press"/>
   <book id="4" parentid="101" attr="titel"  wert="COM"/>
   <book id="5" parentid="101" attr="isbn"   wert="3-8273-1385-6"/>
   <book id="6" parentid="101" attr="verlag" wert="ADDISON-WESLEY"/>
</catalog>

style.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="/">
<html>
<head>
<title>Test</title>
</head>
<body>
<xsl:for-each select="catalog/book">
<xsl:value-of select="@attr"/> / <xsl:value-of select="@wert"/><br/>
</xsl:for-each>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

erwuenschte Ausgabe

+-----------------------------------------------+
|titel         |verlag           |isbm          |
+--------------+-----------------+--------------+
|Inside COM+   |Microsoft Press  |3-86063-498-4 |
|COM           |ADDISON-WESLEY   |3-8273-1385-6 |
+--------------+-----------------+--------------+

Danke
bernd