Avatar billede gon Nybegynder
10. januar 2004 - 22:46 Der er 9 kommentarer og
1 løsning

Flash og XML

Hejsa .. Jeg har lige et hurtigt spørgsmål fra en komplet nybegynder i XML behandling.

Er der en måde, hvor jeg kan bede Flash om at gå ind i det i'te barn af en node og hente den n'te værdi?

eksempel:
rodelementet hedder "bil". Denne node har 15 børn - "dele"
Hver "dele" har 3 børn (forskellige versioner af delen).

Er der en måde hvor jeg kan få Flash til at gå ind i "bil" noden - videre ind i 3. barn og hente den 2. værdi deri ??

De eneste henvisninger mht. navigering i XML filer i Flash jeg kan finde er kommandoer som "nextSibling" og "firstChild" - ikke særlig skarpt når man skal et eller andet underligt sted hen i xml filen.

Kender i et kanon xml forfatter redskab - MS Excel er ikke videre godt - det kalder alle nodes for DATA.


håber mine spørgsmål er stillet overskueligt nok .. ellers skriv det ikke er og jeg vil uddybe dem.
Venligst,
gon
Avatar billede _k Nybegynder
10. januar 2004 - 23:01 #1
bil.childNodes[3].childNodes[2].firstChild

...du vil dog nok putte ovenstående ind i en, eller nok snarere flere forløkker, som tjekker om noden eksisterer, og evt. hvad den hedder if(childNodes[i].nodeName == "kofanger") {}

XMLnotepad er et ok lille program. Ekstremt simpelt, let tilgængeligt og så er det gratis. Skal det være mere fancy, og vil du f.eks. også have smidt DTD'er eller Scemas ud, er XMLspy et godt (og halvdyrt) alternativ.
Avatar billede gon Nybegynder
10. januar 2004 - 23:02 #2
WOW .. kun 10 minutter om at få et svar .. Super ..
jeg tjekker lige dine data ud inden jeg bekræfter svaret :=) .
Avatar billede _k Nybegynder
10. januar 2004 - 23:04 #3
ja, vi er nogle som er hurtige (i hvert fald nogle gange ;o)
Avatar billede gon Nybegynder
10. januar 2004 - 23:24 #4
Lige et hurtigt spørgsmål inden du får de mange point :
Jeg har en xml fil der ser sådan ud: 
<?xml version="1.0" encoding="iso-8859-1" ?>
- <adresser>
- <person>
  <fornavn>Walt</fornavn>
  <efternavn>Disney</efternavn>
  </person>
- <person>
  <fornavn>Anders</fornavn>
  <efternavn>And</efternavn>
  </person>
- <person>
  <fornavn>Onkel</fornavn>
  <efternavn>Joakim</efternavn>
  </person>
  </adresser>
(taget fra IE)
hvor for hedder Disney (der "burde" være adresser.childNodes[1].childNodes[2].firstChild)

istedet for
Avatar billede gon Nybegynder
10. januar 2004 - 23:25 #5
gah .. dumme udfør knap ..

.. adresser.childNodes[1].childNodes[3].firstChild
hvor Walt er childnodes[1].firstChild til sidst. Hvorfor bruges kun ulige tal til at angive entries i en node ?? Er det noget specifikt for Flash ??
Avatar billede _k Nybegynder
10. januar 2004 - 23:31 #6
childNodes er et array og i dem tæller man jo altid fra 0.
Derfor er stien til mr Disneys efternavn:

adresser.childNodes[0].childNodes[1].firstChild

Den glade Joakim er til gengæld:

adresser.childNodes[2].childNodes[1].firstChild - altså et lige tal, så de eksisterer skam....
Avatar billede gon Nybegynder
10. januar 2004 - 23:40 #7
LOL .. jeg ved ikke hvor det går galt for mit Flash .. Den siger "undefined" når jeg giver den lige tal, så den glade joakim er på min

adresser.childnodes[5].chilnodes[3].firstChild - ingen lige tal i mit flash

:=)
joakim er 3child i adresser og andet "barnebarn" .. derfor 5 og 3 i stiangivelse .. ved ikke helt, hvor det går galt, men det virker da i det mindste nu .. takker for hjælpen.

gon

ps.: Hvis du ved noget om, hvorfor min ikke accepterer lige tal så ville det være et hit :
Mit script (rodet som det er):

// opret XML-objekt
dokument = new XML();
// fortæl, hvad der skal ske, når XML-objektet er loaded
dokument.onLoad = convertXML;
// udskriv, at der sker noget
a_txt.text = "Henter data...";
// hent XML-objekt
dokument.load("a.xml");

function convertXML () {
    var temp
    // giv besked om, at data er hentet
    if (this.loaded) {
        a_txt.text = "Data er hentet og behandles nu.";
    }
    // OPRETTELSE AF VARIABLE
    // opret XML-objekt til at indeholde rodelement
    hovedelement = new XML();
    // opret XML-objekt til at indeholde personelement
    dataelement = new XML();
    // opret Array til at indeholde alle personerne
    personliste = new Array();
    // opret Array til at indeholde data for hver person
    dataliste = new Array();
    // SLUT OPRETTELSE AF VARIABLE
    // hent rodelementet ind i "hovedelement"
    hovedelement = this.firstChild.nextSibling;

//Test for at se hvad vi har fat i
a_txt.text = hovedelement.childNodes[5].childNodes[1].firstChild
}
Avatar billede _k Nybegynder
11. januar 2004 - 00:26 #8
Der er en desideret fejl og en enkelt mangel i dit script. Men eftersom du er newbee kan det godt tilgives (jeg skulle også lige lure lidt, for at gennemskue dem ;o)

1: brug: dokument.ignoreWhite = true; // verdensklasse til lige at fjerne alle de for mange linebreaks osv man ikke kan se
2: du laver først et nyt xml-objekt på dokument, hvorefter du laver et xml-objekt mere på variablen "hovedelement" som du henter det første xml-objekt ind i. Det går helt galt, og er sikkert årsagen til det underlige "lige-tals-problem" du oplevede.

Jeg har sjusset en kode til, som se nogenlunde sådan her ud:

dokument = new XML();
dokument.ignoreWhite = true;
dokument.load("xml.xml");
dokument.onLoad = function(succes) {
    if (succes) {
        trace("Loading XML fuldført");
        convertXML();
    }
    else {
        trace("Fejl under loadning af XML");
    }
}

function convertXML () {
    hovedelement = dokument.firstChild
    trace(hovedelement.childNodes[0].childNodes[1].firstChild);
}

...ved ikke hvor grøn du er i Flash, men trace fungerer langt bedre end at sidde og fedte med tekstfelter ;o)
Avatar billede _k Nybegynder
11. januar 2004 - 00:26 #9
... og mange tak for point!
Avatar billede gon Nybegynder
11. januar 2004 - 00:29 #10
selv tak for hjælpen. Jeg er forholdsvis grøn (men bruger dog trace i flæng).
Du har selvfølgelig ret i det med White Spaces (gah.. hvorfor tænkte jeg dog ikke på det:=)).

Nå .. jeg skal ikke forstyrre mere :=)
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