15. oktober 2003 - 16:28
Der er
13 kommentarer og 2 løsninger
Udskrivning af XML i text-felt.
Jeg har følgende XML dokument: <menu_xml> <mainMenu catName="Hvem er vi?"></mainMenu> <mainMenu catName="Produkter"></mainMenu> <subMenu name="Produkt 1"></subMenu> <subMenu name="Produkt 2"></subMenu> <subMenu name="Produkt 3"></subMenu> <mainMenu catName="Kontakt"></mainMenu> </menu_xml> Hvordan udskriver jeg mainMenu og subMenu - hver især ? Det her virker til dels: for(var i = 0; i < rootNode.childNodes.length; i++) { var name = rootNode.childNodes[i].attributes.catName; mainMenu += name + "<BR>"; }
Annonceindlæg fra Infor
15. oktober 2003 - 17:15
#1
Jeg ved ikke ret meget om xml-parsing, men ville da lige give det et forsøg (øvelse du ved :) Din indentering i xml-dokumentet siger mig at det burde se sådan her ud istedet (sig endelig til hvis jeg tager fejl :) <menu_xml> <mainMenu catName="Hvem er vi?"></mainMenu> <mainMenu catName="Produkter"> <subMenu name="Produkt 1"></subMenu> <subMenu name="Produkt 2"></subMenu> <subMenu name="Produkt 3"></subMenu> </mainMenu> <mainMenu catName="Kontakt"></mainMenu> </menu_xml> Jeg har så med mine rookie-evner (eller mangel på samme) parset det ud som følger: myXml = new XML(); myXml.load("test.xml"); myXml.ignoreWhite = true; myXml.onLoad = function() { trace("xml loaded"); rootNode = this.firstChild; trace(rootNode.nodeName); for(var i = 0; i < rootNode.childNodes.length; i++) { trace(i); trace(rootNode.childNodes[i].nodeName); trace(rootNode.childNodes[i].attributes.catName); trace(rootNode.childNodes[i].hasChildNodes()); if (rootNode.childNodes[i].hasChildNodes()) { for (j = 0; j < rootNode.childNodes[i].childNodes.length; j++) { trace("in j for " + rootNode.childNodes[i].childNodes[j]); } } } } Det burde derfra være til at regne ud hvordan du repræsenterer dataen? ..eller osse er jeg bare helt i skoven :P mvh mat
16. oktober 2003 - 09:14
#2
Nope, det er helt rigtigt.. Også din omskrivning af xml-inputtet :)
16. oktober 2003 - 09:55
#3
kool :)
16. oktober 2003 - 15:41
#4
doooh - der var lige en smutter i XML'en, thanks ;) Cool med det script også ;)) - men hvis jeg nu har flere punkter med subMenuer, hvordan bestemmer jeg så, at der kun skal præsenteres værdierne fra én bestemt subMenu ?
16. oktober 2003 - 15:47
#5
Du går først ind under den mainmenu, du vil finde submenu punkter under... Du kan for eksempel lave et array af mainmenu punkter og under hver lave et array et denne mainmenu's submenu-punkter
16. oktober 2003 - 16:13
#6
Ja ok - det lyder jo meget nemt, kan du ikke vise det med lidt kode ? ;)) Helst uden arrays - så tror jeg det bliver nemmere at forstå det grundlæggende, så kan man altid gøre det smartere når det er på plads ;)
16. oktober 2003 - 16:19
#7
Det er da helt vildt besværligt at lave det uden arrays... Så kan man jo ikke dynamisk sætte det op, men for at lave et statisk eksempel: myXml = new XML(); myXml.load("test.xml"); myXml.ignoreWhite = true; myXml.onLoad = function() { var root = this.firstChild; mainmenu1 = root.childNodes[0].attributes.catname; mainmenu2 = root.childNodes[1].attributes.catname; mainmenu2submenu1 = root.childNodes[1].childNodes[0].attributes.name; mainmenu2submenu2 = root.childNodes[1].childNodes[1].attributes.name; mainmenu2submenu3 = root.childNodes[1].childNodes[2].attributes.name; mainmenu3 = root.childNodes[2].attributes.catname; } Håber du kan se systemet :)
17. oktober 2003 - 16:52
#8
Tak jeg kan se hvad du mener - det bliver noget besværligt på den måde ;) Hvordan ville du lave det ? Udfra mat's script ser mit sådan her ud: for(var i = 0; i < rootNode.childNodes.length; i++) { var cat = rootNode.childNodes[i].attributes.catName; mainMenu += cat + "<BR>"; } 1. Er det den rigtige måde at "vise" teksten i et textfield (der kommer vist et <br> for meget i toppen) 2. Når man trykker på en af mainMenu-punkterne så skal den respektive subMenu vises i subMenu (textfield). Menuen bliver ikke genereret dynamisk.
20. oktober 2003 - 19:00
#9
Kun to textfields? Så er det nemt :) myXml = new XML(); myXml.load("test.xml"); myXml.ignoreWhite = true; myXml.main_txt = mainMenu; myXml.sub_txt = subMenu; myXml.onLoad = function() { this.showMain(); } myXml.showMain = function() { var i, n, t = this.firstChild.childNodes; this.main_txt.htmlText = ""; for(i = 0; i < t.length; i++) { n = t[i].attributes.catName; this.main_txt.htmlText += "<a href='asfunction:myXml.showSub,"+i+"'>" + n + "</a><br />"; } } myXml.showSub = function(main) { var i, n, t = this.firstChild.childNodes[sub].childNodes; this.sub_txt.htmlText = ""; for(i = 0; i < t.length; i++) { n = t[i].attributes.name; this.sub_txt.htmlText += n + "<br />"; } } Så skal du lave subMenu og mainMenu være instance-navne for dine tekstfelter (og HTML er slået til). /Barklund
23. oktober 2003 - 12:31
#10
Hej igen - jeg er ked af min langsomme svartid lige for tiden....tak for det sidste script Barklund ;))
Jeg har dog fået lidt flere ønsker til den menu - så jeg tænkte at jeg ville lave et nyt spm. til formålet. Jeg vil derfor bede om et svar fra jer begge så jeg kan afslutte dette spm.
http://www.eksperten.dk/spm/417694
23. oktober 2003 - 15:19
#11
et lille svar fra mig :)
23. oktober 2003 - 16:56
#12
ok :)
23. oktober 2003 - 20:01
#13
Barklund > Det er jo ikke svar jo ;)
23. oktober 2003 - 20:08
#14
Nåja :)
24. oktober 2003 - 10:48
#15
Tark for points :)
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.