Avatar billede t-hviid Nybegynder
29. november 2004 - 10:08 Der er 22 kommentarer og
1 løsning

Hente tekst ind fra XML til dynamisk tekstfelt

Hej !

Jeg er ved at forsøge mig med at hente tekst ind fra et xml dokument i et dynamisk tekstfelt. Jeg har forsøgt mig med følgende men uden held:

menuXml = new XML();
menuXml.ingoreWhite = true;
menuXml.load("menu.xml");
menuXml.onLoad = function(success){
    if(success){
        menu0.text = this.firstChild.childNodes[0].attributes.name;
    }
}

Man kan se xml filen her:
http://hviid.dyndns.dk/flash/menu.xml

Som man kan se ud fra xml dokumentet vil jeg også gerne hente links til teksten indfra xml dokumentet.

Håber der er nogle der kan hjælpe!
Avatar billede thulstrup Nybegynder
29. november 2004 - 10:37 #1
Du har stavet forkert til ignoreWhite.

menuXml = new XML();
menuXml.ignoreWhite = true;
menuXml.load("menu.xml");
menuXml.onLoad = function(success) {
    if (success) {
        menu0.text = this.firstChild.childNodes[0].attributes.name;
    }
};
Avatar billede thulstrup Nybegynder
29. november 2004 - 10:38 #2
Træls lille fejl :o)
Avatar billede t-hviid Nybegynder
29. november 2004 - 11:12 #3
Det er nu rettet :-) Men det virker stadig ikke :-( Kan man ikke teste det direkte i flash? Og er det ikke var.navnet man skal bruge?
Avatar billede t-hviid Nybegynder
29. november 2004 - 11:13 #4
Det skulle man ikke :-) Har du en god løsning på at hente links ind?
Avatar billede thulstrup Nybegynder
29. november 2004 - 11:25 #5
menuXml = new XML();
menuXml.ignoreWhite = true;
menuXml.load("http://hviid.dyndns.dk/flash/menu.xml");
menuXml.onLoad = function(success) {
    if (success) {
        var base = this.firstChild.childNodes;
        var antal = base.length;
        for (var i = 0; i<antal; i++) {
            trace(base[i].attributes.name+" indeholder disse links:");
            nodeAntal = base[i].childNodes.length;
            for (var j = 0; j<nodeAntal; j++) {
                trace(base[i].childNodes[j].attributes.name+": "+base[i].childNodes[j].attributes.link);
            }
            trace("\n");
        }
    }
};
Avatar billede t-hviid Nybegynder
29. november 2004 - 14:33 #6
Jeg får følgende meddelse:
Output (nyt
Avatar billede t-hviid Nybegynder
29. november 2004 - 14:34 #7
Jeg prøver igen :-)

Jeg får følgende meddelse:
Output (nyt vindue)
Manualer: http://www.snofrutech.com/?ID=manualer
Updates/Downloades: http://www.snofrutech.com/?ID=updatesdownloads


Sprog indeholder disse links:
Dansk:
Engelsk2:

Men man kan ikke se tekst eller links !
Avatar billede thulstrup Nybegynder
29. november 2004 - 14:45 #8
Det er sikkert mere tekst hvis du prøver at resize output vinduet :o)

Hvad mener du med at der ikke er tekst eller links? Det er jo lige præcis den data vi tracer. Hvis du vil have den ind i dit tekst felt skriver du bare noget ala:

menuXml = new XML();
menuXml.ignoreWhite = true;
menuXml.load("http://hviid.dyndns.dk/flash/menu.xml");
menuXml.onLoad = function(success) {
    if (success) {
        var base = this.firstChild.childNodes;
        var antal = base.length;
        menu0.htmlText = "";
        for (var i = 0; i<antal; i++) {
            nodeAntal = base[i].childNodes.length;
            menu0.htmlText += base[i].attributes.name+"\n";
            for (var j = 0; j<nodeAntal; j++) {
                menu0.htmlText += "<a href=\""+base[i].childNodes[j].attributes.link+"\">"+base[i].childNodes[j].attributes.name+"</a>\n";
            }
        }
    }
};
Avatar billede t-hviid Nybegynder
29. november 2004 - 14:51 #9
Ok, jeg er ude i noget nyt her, så jeg skal lige forstå det :-) Du har helt ret, der var mere. Det jeg gerne vil, er at hente name ind i tekstfeltet og bruge link i xml'en til at linke textfeltet med. Det du har lavet her sidst er nok i den retning men det virker ikke helt for mig.
Avatar billede thulstrup Nybegynder
29. november 2004 - 15:09 #10
Det ovenstående skulle gerne gøre lige det du efterspørger. Henter xml'en ind og laver links ud af det.

Hvis det ikke virker er det nok fordi du ikke har slået html til på dit tekstfelt.
Du kan gøre det manuelt (knappen "render text as html") eller skrive:
menu0.html = true;
Avatar billede t-hviid Nybegynder
29. november 2004 - 15:28 #11
Det havde jeg glemt, nu henter den teksten men ikke link. Jeg må også indrømme, at jeg her er sat lidt af, så hvis du havde 5 min til at forklare hvad der sker.
Avatar billede thulstrup Nybegynder
29. november 2004 - 15:45 #12
Jeg går ud fra at du er med på den første del af scriptet, så den hopper vi let og elegant hen over.

var base = this.firstChild.childNodes;
// Det er bare ren dovenskab. Istedet for at skulle skrive 'this.firstChild.childNodes' hver gang, opretter vi en variabel der henviser til det istedet.

var antal = base.length;
// vi checker hvor mange childNodes der er (dem du kalder sections). Det skal vi vide når vi skal til at loope dem igennem.

menu0.htmlText = "";
// tømmer bare tekstfeltet, hvis der stod noget i forvejen.

for (var i = 0; i<antal; i++) {
// vi starter vores loop

nodeAntal = base[i].childNodes.length;
// vi checker hvor mange childNodes (subsecs) denne childNode (section) har. Igen skal vi bruge det når vi skal loope dem igennem.

menu0.htmlText += base[i].attributes.name+"\n";
// har kommer vi section navnet (SnofruTech, Forhandler, osv) ind i tekstfeltet.
// += betyder at tekst ligges til den tekst der allrede er der.
// \n giver et linieskift.

for (var j = 0; j<nodeAntal; j++) {
// her starter vi vores andet loop

menu0.htmlText += "<a href=\""+base[i].childNodes[j].attributes.link+"\">"+base[i].childNodes[j].attributes.name+"</a>\n";
// for at gøre det lidt mere overskueligt kan vi dele linien lidt op:
var url = base[i].childNodes[j].attributes.link;
var navn = base[i].childNodes[j].attributes.name;
menu0.htmlText += "<a href=\""+url+"\">"+navn+"</a>\n";

// og forklaringen:
var url = base[i].childNodes[j].attributes.link;
// vi finder linket for subsec'en.
var navn = base[i].childNodes[j].attributes.name;
// vi finder navnet for subsec'en.
menu0.htmlText += "<a href=\""+url+"\">"+navn+"</a>\n";
// her opretter vi linket og tilføjer det til tekst feltet.

Og det var vist det...Håber det hjalp lidt.
Avatar billede t-hviid Nybegynder
29. november 2004 - 15:56 #13
Tak, det var meget forståeligt for mig og tæt på det jeg forstået først :-)  Men det virker stadig ikke helt for mig. Den henter fint nok teksten ind men virker ikke som link. Skal jeg have noget onRelease på nogen steder ?
Avatar billede thulstrup Nybegynder
29. november 2004 - 16:06 #14
Glad for at jeg kunne gøre det lidt mere forståeligt :o)

Linksene virker fint hos mig:
http://overdose.dk/eksperten/spm566085/

Prøv at hent .fla filen og se om du har gjort det samme:
http://overdose.dk/eksperten/spm566085/spm566085.fla
Avatar billede t-hviid Nybegynder
29. november 2004 - 16:14 #15
Hvad er den lavet i? Jeg sidder med en flash mx ! Har ikke fået købt mx 2004 endnu
:-)
Avatar billede thulstrup Nybegynder
29. november 2004 - 16:19 #16
Jamen den er da selvfølgelig lavet i 2004 versionen :o)

Prøv igen, nu er den gemt som mx version:
http://overdose.dk/eksperten/spm566085/
Avatar billede t-hviid Nybegynder
29. november 2004 - 16:27 #17
Den forskel jeg kan se er dette:
//menu0.htmlText += base[i].attributes.name+"\n"; - fra den der virker
menu0.htmlText += base[i].attributes.name+"\n"; - fra den der ikke virker

Men det er perfekt nu. Hvis du ligger et svar er der velfortjente point til dig :-)
Avatar billede t-hviid Nybegynder
29. november 2004 - 16:34 #18
Et lille tillægs ? Nu henter den alle min links og tekst ind i samme tekstfelt. Her havde jeg tænkt på et tekstfelt for hver section.
Avatar billede thulstrup Nybegynder
29. november 2004 - 16:35 #19
Jeg udkommenterede egentlig bare den linie, fordi jeg ikke var sikker på om du ville have den med. Den burde ikke have nogen betydning for det samlede script.
Avatar billede t-hviid Nybegynder
29. november 2004 - 16:37 #20
Det er den der gør at det ikke virker her ved mig :-)
Avatar billede thulstrup Nybegynder
29. november 2004 - 16:48 #21
Ok? Nu er jeg forvirret :)

Hvis du vil have hvert link i sit eget tekstfelt:

menuXml = new XML();
menuXml.ignoreWhite = true;
menuXml.load("http://hviid.dyndns.dk/flash/menu.xml");
menuXml.onLoad = function(success) {
    if (success) {
        var num = 0;
        var base = this.firstChild.childNodes;
        var antal = base.length;
        for (var i = 0; i<antal; i++) {
            nodeAntal = base[i].childNodes.length;
            for (var j = 0; j<nodeAntal; j++) {
                _root.createTextField("tf"+num, num, 0, 20*num, 100, 20);
                var tf_txt = _root["tf"+num];
                tf_txt.html = true;
                var url = base[i].childNodes[j].attributes.link;
                var navn = base[i].childNodes[j].attributes.name;
                tf_txt.htmlText += "<font face=\"verdana\" size=\"11\" color=\"#333333\"><a href=\""+url+"\">"+navn+"</a></font>\n";
                num++;
            }
        }
    }
};
Avatar billede t-hviid Nybegynder
29. november 2004 - 20:55 #22
Hvis jeg nu selv rent fysisk vil oprette mine tekstfelter, er det så stadig muligt at hente tekst og link ind fra de forskellige sections i xml'en. Det er en horisontalmenu jeg er ved at lave, hvor menu0 er selve menupuntet (section name) og men0Submenu er undermenuen (subsec name). I undermenu må den gerne hente alle subsec's under section name-
Avatar billede t-hviid Nybegynder
29. november 2004 - 21:35 #23
Jeps, jeg fandt selv ud af det :-) Jeg begynder at forstå det ;-))
menuXml = new XML();
menuXml.ignoreWhite = true;
menuXml.load("http://hviid.dyndns.dk/flash/menu.xml");
menuXml.onLoad = function(success) {
    if (success) {
        var base = this.firstChild.childNodes;
        menu0.htmlText = "";
        nodeAntal = base[0].childNodes.length;
        for (var j = 0; j<nodeAntal; j++){
                menu0.htmlText += "<a href=\""+base[0].childNodes[j].attributes.link+"\">"+base[0].childNodes[j].attributes.name+"</a>\n";
            }
    }
};
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