ok, jeg opretter et xml dokument med mine data i morgen, jeg lader spørgsmålet være åbent, for jeg får sikkert brug for hjælp med at håndtere det i flash. Jeg har godt styr på php, men flash er nyt for mig...
ok, jeg har nu kigget lidt på XML objectet og jeg føler ikke jeg er blevet meget klogere, jeg har et par spørgsmål:
1) Hvordan Kan jeg opsætte xml-dokumentet så det er nemmest at læse i flash. Data har strukturen jeg viste overfor og der er ca. 1100 rækker, jeg tænkte på noget i stil med dette:
2) Please forklar mig, hvordan jeg kan tilgå de data jeg importerer. Jeg kan ikke umiddelbart overskue hvordan det gøres. Data skal benyttes som beskrevet i pseudo php for-løkken ovenover..
var foo:XML = new XML(); foo.ignoreWhite = true; foo.onLoad = function(s) { if (!s) trace("fejl i læsning"); var datas:Array = this.firstChild.childNodes; var d:XMLNode; for (var i:Number = 0; i < datas.length; i++) { d = datas[i]; trace("så er vi nået til person nummer "+i); trace("alder er "+d.childNodes[0].nodeValue); trace("penAlder er "+d.childNodes[1].nodeValue); trace("aktPas er "+d.childNodes[2].nodeValue); trace("val er "+d.childNodes[3].nodeValue); } } foo.load("min.xml");
Og så skal du huske at indkode din XML-fil i UTF-8. Genererer du den fra PHP, så bruge utf8_encode, ellers sørg for at gemme din fil i UTF-8 format, hvis du laver en XML-fil direkte i din editor.
Det burde den i højeste grad - prøv at trace hele this i starten af onLoad-funktionen:
var foo:XML = new XML(); foo.ignoreWhite = true; foo.onLoad = function(s) { if (!s) trace("fejl i læsning"); trace("så har jeg loaded:\n"+this); var datas:Array = this.firstChild.childNodes; var d:XMLNode; for (var i:Number = 0; i < datas.length; i++) { d = datas[i]; trace("så er vi nået til person nummer "+i); trace("alder er "+d.childNodes[0].nodeValue); trace("penAlder er "+d.childNodes[1].nodeValue); trace("aktPas er "+d.childNodes[2].nodeValue); trace("val er "+d.childNodes[3].nodeValue); } } foo.load("min.xml");
Du har sikret dig, at din PHP outputter korrekt XML?
Jeg er som sagt meget ny i flash og jeg tænkte på hvor din kodestump skal sættes id?.. skal den være tilknyttet et movieclip, button eller skal den bare ligge i et seperat layer. Er det nødvendigt atægge det ind i en event, eller kan det bar ligges i en frame uden events?
Jeg hopper lige med her :) Ved godt det her måske er et dumt spørgsmål, men hvor tester du, inde i flash eller oppe på serveren? Fordi hvis det er på serveren vil du ikke kunne se outputtet af tracen
Odd, den eneste måde jeg kan få den til at gå udenom funktionen ved er at undlade foo.load("min.xml") og eller som sagt teste den uden for flash hvor tracerne ikke bliver set, så er lidt tabt,, barklund??
$xmlFormData = utf8_encode($xmlData); $filepathXML = "data.xml"; if (!file_exists($filepathXML)) { touch($filepathXML); } if (!$handleXML = fopen($filepathXML, 'w')) { exit; } if (fwrite($handleXML, $xmlFormData) === FALSE) { exit; } fclose($handleXML);
------------
Og her er actionscript-koden, som ligger i et seperat layer i frame 1 (der er kun en frame):
var foo:XML = new XML(); foo.ignoreWhite = true; trace("KAOS1"); foo.onLoad = function(s) { trace("KAOS2"); if (!s) trace("fejl i læsning"); trace("så har jeg loaded:\n"+this); var datas:Array = this.firstChild.childNodes; var d:XMLNode; for (var i:Number = 0; i < datas.length; i++) { d = datas[i]; trace("så er vi nået til person nummer "+i); trace("alder er "+d.childNodes[0].nodeValue); trace("penAlder er "+d.childNodes[1].nodeValue); trace("aktPas er "+d.childNodes[2].nodeValue); trace("val er "+d.childNodes[3].nodeValue); } } foo.load("data.xml"); trace("KAOS3");
Altså, din php ligger vel på serveren? Altså din data.xml er en php fil på en server - right? Så du skal jo linke til den som http://domæne/data.xml eller hvor den nu er henne.
Hvis den aldrig kommer ind i funktionen er det vel fordi den aldrig finder din fil? Hvornår bliver dit php script kaldt, der genererer denne data.xml?
Er det overhovedet nødvendigt at gemme det som en .xml-fil først, fremfor bare at lade php sprøjte en xml-formatteret tekststreng ud, og så kalde dette php-script i din XML.load?
Det burde det være, ja. Men hvis jeg helst simpelt kopierer ovenstående script og lægger en vilkårlig xml-fil som data.xml ved siden af min fla-fil, så virker det fuldstændig, som det skal. Du bruger vel ikke Flash 4 eller noget i den stil?
.swf filen er embedded i den php fil der genererer .xml dokumentet. Jo, det ville være fint, hvis jeg kunne slippe for at oprette et xml dokument! Hvordan får jeg php til at sende mit data til flash?..
Hvis du bruger MX (og ikke MX 2004) så ændr det til:
var foo = new XML(); foo.ignoreWhite = true; trace("KAOS1"); foo.onLoad = function(s) { trace("KAOS2"); if (!s) trace("fejl i læsning"); trace("så har jeg loaded:\n"+this); var datas = this.firstChild.childNodes; var d; for (var i = 0; i < datas.length; i++) { d = datas[i]; trace("så er vi nået til person nummer "+i); trace("alder er "+d.childNodes[0].nodeValue); trace("penAlder er "+d.childNodes[1].nodeValue); trace("aktPas er "+d.childNodes[2].nodeValue); trace("val er "+d.childNodes[3].nodeValue); } } foo.load("data.xml"); trace("KAOS3");
nu siger den dog: så har jeg loaded: <?xml version="1.0" encoding="UTF-8"?><register><data><age>20</age><penAlder>60</penAlder><aktpas>aktiv</aktpas><val>29.720258</val></data><data><age>20</age><penAlder>61</penAlder><aktpas>aktiv</aktpas><val>30.229831</val></data></register> så er vi nået til person nummer 0 alder er null penAlder er null aktPas er null val er null så er vi nået til person nummer 1 alder er null penAlder er null aktPas er null val er null
trace("alder er "+d.childNodes[0].firstChild.nodeValue); trace("penAlder er "+d.childNodes[1].firstChild.nodeValue); trace("aktPas er "+d.childNodes[2].firstChild.nodeValue); trace("val er "+d.childNodes[3].firstChild.nodeValue);
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.