Avatar billede kragekjaer Praktikant
18. februar 2003 - 14:26 Der er 28 kommentarer og
1 løsning

Problemer med XML

Jeg har denne simple XML, men er dog ret ny i XML:

http//www.kragekjaer.dk/test/pages.xml

Kort sagt vil jeg gerne have, at når man trykker på en knap, så skal man kunne hente informationerne fra fx. side[1].

Jeg har kæmpet en kamp for at få fat i attributerne, og nu prøver jeg at se om nogle kan hjælpe her.

Her er min nuværende kode:

pagesXML = new XML();
pagesXML.ignoreWhite = true;
pagesXML.onLoad = myLoad;
pagesXML.load("pages.xml");

function myLoad() {
    //Katalog//ikke interessant
    KatalogNode = this.childNodes[0];
    trace(KatalogNode);
    AntalSider = KatalogNode.childNodes.length;
    trace("Antalsider: "+AntalSider);
    //tæller sider
    SideNode = KatalogNode.childNodes[0];
    //får her fat i side1!!!
    trace(SideNode);
    HotSpotNode = SideNode.childNodes[0];
    //får her fat i side1´s 1.hotspot!!!
    trace(HotSpotNode);
    for (attr in HotSpotNode.attributes) {
        //får her fat i attributer til side1´s 1. hotspot
        trace("Attributer: "+attr+" Value: "+HotSpotNode.attributes[attr]);
    }
    trace(KatalogNode.firstChild.nextSibling.childNodes.length);
    //antal hotspots side 2
    trace(KatalogNode.firstChild.childNodes.length);
    //2 hotspots på side 1
    trace(KatalogNode.childNodes[1].childNodes.length);
    //antal hotspots på side 2
    //Varetekst
    VareTekstNode = HotSpotNode.childNodes[0];
    // Får fat i vareteksten
    trace(VareTekstNode);
    //
    //
    //DET ER HER MAN SKAL HENTE INFORMATIONERNE VED TRYK PÅ EN KNAP, PAGE er DEN VARIBAEL SOM KOMMER IND I FUNKTIONEN VED TRYK PÅ EN KNAP.

    //page=page-1;
    //trace(page);
    //currentPage=KatalogNode.childNodes[page.toString()];//OK
    //trace("Fisse: "+currentPage);//OK
   

}

Håber der er nogle der gider hjælpe.
Avatar billede kragekjaer Praktikant
18. februar 2003 - 14:26 #1
Avatar billede kragekjaer Praktikant
18. februar 2003 - 14:30 #2
Altså kort sagt vil jeg gerne have det sådan at når man trykker på en knap, kaldes en funktion, som går ind og henter informationerne indenfor en bestemt <side> </side>
Avatar billede barklund Nybegynder
18. februar 2003 - 14:51 #3
Hvis du vil have xml-objektet fra en bestemt side:

pagesXML.getPage = function(num) {
    return this.firstChild.childNodes[num];
}

Så kan du fra en knap kalde:

on (release) {
    side2XML = _root.pagesXML.getPage(2);
    trace(side2XML.childNodes.length); //antal "hotspots"
}
Avatar billede kragekjaer Praktikant
18. februar 2003 - 15:50 #4
Ok, tak. Men jeg skal også have attributerne ud som variable, og det har jeg haft store problemer med.
Avatar billede kragekjaer Praktikant
18. februar 2003 - 15:51 #5
Samt selve teksten.
Avatar billede kragekjaer Praktikant
18. februar 2003 - 15:52 #6
Men godt indlæg, for jeg vidste ikke hvordan jeg skulle gå til den funktion.
Avatar billede barklund Nybegynder
18. februar 2003 - 15:57 #7
hvorfor er det et problem?

pagesXML.getPage = function(num) {
    var top = this.firstChild.childNodes[num];
    var i, ret = new Array();
    for (i in top.childNodes) {
        ret[i].attributes = top.childNodes[i].attributes;
        ret[i].text = top.childNodes[i].firstChild.nodeValue;
    }
    return ret;
}

Så får du ved

p = pagesXML.getPage(0);

Et svar som også kunne skrives som:

p[0].attributes = {s:"100", w:"200", h:"150", pris:"50.25"};
p[0].text = "Kylling med fyld";
p[1].attributes = {s:"150", w:"150", h:"300", pris;"20.25"};
p[1].text = "Tunsalat";
Avatar billede kragekjaer Praktikant
18. februar 2003 - 16:12 #8
Tak, har du prøvet det? Kan ikke få det til at funge...
Avatar billede kragekjaer Praktikant
18. februar 2003 - 16:13 #9
jeg får undefined når jeg prøver at trace et svar
Avatar billede barklund Nybegynder
18. februar 2003 - 16:18 #10
øjeblik, så prøver jeg lige selv at sætte det op... "undefined" kan det vel ikke give... :o)
Avatar billede kragekjaer Praktikant
18. februar 2003 - 16:26 #11
ok, venter spændt
Avatar billede barklund Nybegynder
18. februar 2003 - 16:26 #12
Overhovedet ikke :o)

Jeg får det fint til at virke... Prøv at erstatte hele din myLoad med:

function myLoad(s) {
    trace("loaded succesfully? "+s);
    trace("getPage(1) = "+this.getPage(1));
}
Avatar billede barklund Nybegynder
18. februar 2003 - 16:28 #13
jeg får til gengæld også undefined som dig, hvis jeg kalder getPage() før min xml er loaded ind - altså før funktioner myLoad() har kørt eller hvis det er en forkert xml-fil, jeg loader ind (fx en der ikke findes)
Avatar billede kragekjaer Praktikant
18. februar 2003 - 16:34 #14
kan du ikke kopiere din kode ind her, for jeg får det ikke til at virke...
Avatar billede kragekjaer Praktikant
18. februar 2003 - 16:41 #15
Elelr maile mig den på dennis@kragekjaer.dk, jeg er nemlig lidt forvirret over hvad du gør her.
Avatar billede kragekjaer Praktikant
18. februar 2003 - 16:47 #16
I output får jeg

loaded succesfully? true
getPage(1) =
Avatar billede barklund Nybegynder
18. februar 2003 - 16:58 #17
pagesXML = new XML();
pagesXML.ignoreWhite = true;
pagesXML.onLoad = function(s) {
    trace("loaded succesfully? "+s);
    trace("getPage(1) = "+this.getPage(1));
}
pagesXML.load("pages.xml");
pagesXML.getPage = function(num) {
    var top = this.firstChild.childNodes[num];
    return top;
}
Avatar billede kragekjaer Praktikant
18. februar 2003 - 17:20 #18
pagesXML = new XML();
pagesXML.ignoreWhite = true;
pagesXML.onLoad = function(s) {
    trace("loaded succesfully? "+s);
    trace("getPage(1) = "+this.getPage(1));
}
pagesXML.load("pages.xml");

pagesXML.getPage = function(num) {
    var top = this.firstChild.childNodes[num];
    return top;

}

Har en knap:
on(release){
_level0.pagesXML.getPage(1);
}

Og der sker intet.......
Avatar billede kragekjaer Praktikant
18. februar 2003 - 18:06 #19
Hjææælp
Avatar billede barklund Nybegynder
18. februar 2003 - 19:24 #20
kommer der ikke noget i trace?

Og der er ingen grund til at åbne et nyt spørgsmål - det er desuden heller ikke tilladt...
Avatar billede barklund Nybegynder
18. februar 2003 - 19:29 #21
Det er faktisk et ret nemt spørgsmål, så hvis du måske forklarede lidt mere om, hvad der efterfølgende skulle ske mere variablerne (vises i tekstfelt/liste eller...)
Avatar billede kragekjaer Praktikant
18. februar 2003 - 19:59 #22
Variablerne (attributer+tekst) skal for hver ind i en funktion, minFunk(s,w,h,pris,tekst)
Avatar billede kragekjaer Praktikant
18. februar 2003 - 19:59 #23
JEg synes nu ikke det er et nemt spørgsmål
Avatar billede barklund Nybegynder
18. februar 2003 - 20:04 #24
ikke andet? den skal bare køre minFunk en gang for hver hotspot?

pagesXML = new XML();
pagesXML.ignoreWhite = true;
pagesXML.onLoad = function(s) {
    trace("loaded succesfully? "+s);
}
pagesXML.load("pages.xml");
pagesXML.getPage = function(num) {
    var top = this.firstChild.childNodes[num].childNodes;
    var i, ret = new Array();
    for (i in top) {
        ret[i] = {s:    top[i].attributes.s,
                  w:    top[i].attributes.w,
                  h:    top[i].attributes.h,
                  pris:  top[i].attributes.pris,
                  teekst:top[i].firstChild.nodeValue};
    }
    return ret;

}




on(release){
    var i, side = _level0.pagesXML.getPage(1);
    for (i in side) {
        minFunk(side[i].s,side[i].w,side[i].h,side[i].pris,side[i].tekst)
    }
}
Avatar billede barklund Nybegynder
18. februar 2003 - 20:06 #25
Det kan også ske direkte i getPage(), så du bare kalder den en gang, og så lægger den det selv ind i minFunk:


pagesXML = new XML();
pagesXML.ignoreWhite = true;
pagesXML.onLoad = function(s) {
    trace("loaded succesfully? "+s);
}
pagesXML.load("pages.xml");
pagesXML.getPage = function(num) {
    var i, top = this.firstChild.childNodes[num].childNodes;
    for (i in top)
        minFunk(top[i].attributes.s,top[i].attributes.w,top[i].attributes.h,top[i].attributes.pris,top[i].firstChild.nodeValue);
}


on(release){
    _level0.pagesXML.getPage(1);
}
Avatar billede barklund Nybegynder
18. februar 2003 - 20:09 #26
Og hvis du vil kalde den første "side" for "1" istedet for "0", som er standard, så er det bare at tilføje et "-1":

pagesXML = new XML();
pagesXML.ignoreWhite = true;
pagesXML.onLoad = function(s) {
    trace("loaded succesfully? "+s);
}
pagesXML.load("pages.xml");
pagesXML.getPage = function(num) {
    var i, top = this.firstChild.childNodes[num-1].childNodes;
    for (i in top)
        minFunk(top[i].attributes.s,top[i].attributes.w,top[i].attributes.h,top[i].attributes.pris,top[i].firstChild.nodeValue);
}
Avatar billede kragekjaer Praktikant
18. februar 2003 - 20:14 #27
Fantastisk, det virker. Tusind tak. Hvis du svarer i det andet spørgsmål, får du pointene der også. Og svar lige på dette også.
Avatar billede barklund Nybegynder
18. februar 2003 - 20:45 #28
Ellers tak... 100 point er rigeligt for dette spørgsmål...

/Barklund :o)
Avatar billede barklund Nybegynder
18. februar 2003 - 21:12 #29
Tark for point :o)
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