Avatar billede zakiller Nybegynder
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>";
}
Avatar billede mat Nybegynder
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
Avatar billede barklund Nybegynder
16. oktober 2003 - 09:14 #2
Nope, det er helt rigtigt.. Også din omskrivning af xml-inputtet :)
Avatar billede mat Nybegynder
16. oktober 2003 - 09:55 #3
kool :)
Avatar billede zakiller Nybegynder
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 ?
Avatar billede barklund Nybegynder
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
Avatar billede zakiller Nybegynder
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 ;)
Avatar billede barklund Nybegynder
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 :)
Avatar billede zakiller Nybegynder
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.
Avatar billede barklund Nybegynder
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
Avatar billede zakiller Nybegynder
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
Avatar billede mat Nybegynder
23. oktober 2003 - 15:19 #11
et lille svar fra mig :)
Avatar billede barklund Nybegynder
23. oktober 2003 - 16:56 #12
ok :)
Avatar billede mat Nybegynder
23. oktober 2003 - 20:01 #13
Barklund > Det er jo ikke svar jo ;)
Avatar billede barklund Nybegynder
23. oktober 2003 - 20:08 #14
Nåja :)
Avatar billede barklund Nybegynder
24. oktober 2003 - 10:48 #15
Tark for points :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester