[asp] Celko design naar XML

Pagina: 1
Acties:

  • foske
  • Registratie: Juli 2001
  • Laatst online: 18-05 22:42
Het probleem is als volgt:

Ik heb in mijn database het celko design voor boomstructuren doorgevoerd. (dus met left, right kollomen).
Dit werkt allemaal, alleen nu wil ik van deze gegevens een XML tree maken. Omdat ik deze XML output wil gebruiken als data voor mijn website. Maar ik krijg dit maar niet voor elkaar.

Ik haal de data op in mijn asp pagina, daarna moet deze via het aanmaken van een XMLDOM object de structuur in XML omzetten.

waar het vooral op neer komt, is het volgende:
Hoe weet ik bij welke instantie van een CreateElement ik ben gebleven?

ff een simpel voorbeeld (ik krijg de items ook in deze volgorde uit de db, met lft, rgt en hun level):
code:
1
2
3
4
5
6
7
- website
  - home
  - nederland
    - produkten
      - truien
    - diensten
  - belgie


Het eronder hangen van childs onder een item is niet moeilijk. Tot truien gaat het dan ook goed. Maar hoe krijg ik daarna diensten en belgie weer op een niveau lager?

Ik maak het nu in asp, maar als er ergens in een voorbeeld is (of pseudo code) in welke taal dan ook, graag... Want ik kom er niet aan uit..

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Volgens mij zijn er diverse voorbeelden van Celko en anderen waar er een dergelijke structuur wordt aangeboden. Je weet toch wel wanneer je de bovenliggende niveau's moet "afsluiten" in XML?
Dat is nou het aardige van de manier van Celko. Je weet gewoon dat als het verschil van de right-waarde met de daarbovenliggende 1 is, dat ie dan het laatste kind op dat niveau was...

Het voorgaande niveau zal je bij wat voor opslagmethode dan ook altijd bij moeten houden, een Stack is wel een aardige structuur om dat soort niveau-geregelde dingen bij te houden. Of je moet aan het vorige object dat je aanmaakte kunnen vragen wat diens parent was en zodra de right-waarde van het huidige object maar 1 verschilt van diens parent je opklimt naar die parent en daar verder mee werkt (tenzij de rightwaarde daarvan maar 1 verschilde met diens parent, etc).

Mocht je een sparse-variant van Celko's boomgebeuren gebruiken, dan moet je even beter nadenken over de "stopcriteria" per niveau, maar het komt over het algemeen op hetzelfde neer.

[ Voor 51% gewijzigd door ACM op 29-12-2004 11:57 ]


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 18-05 15:53

Jaspertje

Max & Milo.. lief

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set xml = server.createobject("msxml.domdocument")
xml.loadxml "<TREE/>"

set element = xml.createelement("HOOFDITEM")
element.setattribute "name", "nederland"
xml.documentelement.appendchild(element)


set element = xml.createelement("SUBITEM")
element.setattribute "name", "producten"
xml.documentelement.childnodes(0).appendchild(element)

set element = xml.createelement("HOOFDITEM")
element.setattribute "name", "belgie"
xml.documentelement.appendchild(element)


Dit moet je dan (uitteraard) dynamisch maken

suc6

[ Voor 19% gewijzigd door Jaspertje op 29-12-2004 13:19 ]


  • foske
  • Registratie: Juli 2001
  • Laatst online: 18-05 22:42
Heej jasper, dat childnodes ding is denk ik het gene wat ik miste, bedankt!

edit:
ow, en natuurlijk niet vergeten! Van jouw verhaal word ik ook steeds wijzer ACM :D dus ook bedankt

[ Voor 43% gewijzigd door foske op 29-12-2004 14:47 ]


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 18-05 15:53

Jaspertje

Max & Milo.. lief

Fossie schreef op woensdag 29 december 2004 @ 14:03:
Heej jasper, dat childnodes ding is denk ik het gene wat ik miste, bedankt!

edit:
ow, en natuurlijk niet vergeten! Van jouw verhaal word ik ook steeds wijzer ACM :D dus ook bedankt
Om nog een keer in te haken op je verhaal en wat het misschien ook makkelijk kan maken moet je ook nog maar ff naar het volgende voorbeeld kijken

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set xml = server.createobject("msxml.domdocument")
xml.loadxml "<TREE/>"

set element = xml.createelement("HOOFDITEM")
element.setattribute "name", "nederland"
xml.documentelement.appendchild(element)


set element1 = xml.createelement("SUBITEM")
element1.setattribute "name", "producten"
Element.appendchild(element1)

set element = xml.createelement("HOOFDITEM")
element.setattribute "name", "belgie"
xml.documentelement.appendchild(element)

Hier maak je dus voor je subitem een nieuw element aan en hang je dat aan je hoofditem op dat moment. Dit maakt het ook makkelijker om alles recursief te maken..