10. januar 2004 - 22:46Der 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
...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.
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)
.. 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 ??
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 }
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)
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 :=)
Synes godt om
Ny brugerNybegynder
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.