Ik ben momenteel bezig met ASP en XML en zit met een probleempje. Het idee is dat ik een SQL query uitvoer en de RecordSet die ik terugkrijg met een functie omzet in XML. Zover geen problemen, mn functie ziet er als volgt uit:
De XML die hieruit komt ziet er dan als volgt uit:
Dit voor eenvoudige queries voldoende, maar met bijvoorbeeld een join van 2 tabellen ziet de XML er niet zo uit als ik eigenlijk wil. Hier een (ff snel verzonnen) voorbeeld van een tabel Vakken en tabel Boeken, het Vak ‘naam1’ heeft 2 boeken.
Resultaat:
Gewenst resultaat:
Mijn vraag is dus: is er een manier om het gewenste XML resultaat te krijgen zonder dat ik voor iedere query een aparte recordsetToXML functie hoef te schrijven? Het is eigenlijk een beetje een onmogelijke vraag omdat er denk ik geen recordsetToXML functie is die alle gevallen dekt, dus in dat geval een andere vraag: hoe zou jij dit aanpakken?
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| XML.prototype.recordsetToXML = function(rs, rootname, rowname) { try { var root = this.xmldoc.createElement(rootname); rs.MoveFirst; var row; for(; !rs.EOF; rs.MoveNext) { row = this.xmldoc.createElement(rowname); var attr; for(var j = 0; j < rs.Fields.Count; j++) { attr = this.xmldoc.createElement(rs.Fields.Item(j).Name); attr.text = rs.Fields.Item(j).Value; row.appendChild(attr); } root.appendChild(row); } this.xmldoc.appendChild(root); this.xmldoc.save(Server.Mappath("last.xml")); } catch(e) { AdvancedError.prototype.catchError(e, "XML.recordsetToXML()"); } } |
De XML die hieruit komt ziet er dan als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
| <rootname>
<rowname>
<fieldname1>fieldvalue1</fieldname1>
<fieldname2>fieldvalue2</fieldname2>
</rowname>
<rowname>
<fieldname1>fieldvalue1</fieldname1>
<fieldname2>fieldvalue2</fieldname2>
</rowname>
..
</rootname> |
Dit voor eenvoudige queries voldoende, maar met bijvoorbeeld een join van 2 tabellen ziet de XML er niet zo uit als ik eigenlijk wil. Hier een (ff snel verzonnen) voorbeeld van een tabel Vakken en tabel Boeken, het Vak ‘naam1’ heeft 2 boeken.
Resultaat:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <vakken>
<vak>
<naam>naam1</naam>
<boek>boek1</boek>
</vak>
<vak>
<naam>naam1</naam>
<boek>boek2</boek>
</vak>
<vak>
<naam>naam2</naam>
<boek>boek3</boek>
</vak>
..
</vakken> |
Gewenst resultaat:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| <vakken>
<vak>
<naam>naam1</naam>
<boeken>
<boek>boek1</boek>
<boek>boek2</boek>
</boeken>
</vak>
<vak>
<naam>naam2</naam>
<boeken>
<boek>boek3</boek>
</boeken>
</vak>
..
</vakken> |
Mijn vraag is dus: is er een manier om het gewenste XML resultaat te krijgen zonder dat ik voor iedere query een aparte recordsetToXML functie hoef te schrijven? Het is eigenlijk een beetje een onmogelijke vraag omdat er denk ik geen recordsetToXML functie is die alle gevallen dekt, dus in dat geval een andere vraag: hoe zou jij dit aanpakken?