Toon posts:

[flash & XML] geen XML output

Pagina: 1
Acties:
  • 227 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben een n00b wanneer het op flash en XML aankomt, ik probeer dus een XML bestand in te laden, maar krijg geen output in flash. Ik gebruik de code hieronder:
Hij geeft wel een succesvolle connectie aan, maar vervolgens krijg ik als waarde undefinined terug. Wat ik ook probeer (heb overigens ook enkele keren een NULL waarde teruggekregen), het lukt niet

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
nieuws = new XML ();
nieuws.onLoad = readData;
nieuws.load("http://www.music2k.nl/new/data/nieuws.xml");

function readData (succes) {
    if (succes) {
        trace ("connection: succes");
        trace (nieuws.firstChild.childNodes[0].childNodes[0].nodeValue);
    }
    else {
        trace ("connection: failed");
    }
}


het XML bestand staat op : http://www.music2k.nl/new/data/nieuws.xml

  • thejoker80
  • Registratie: April 2002
  • Niet online

thejoker80

leuk hè?

Ik weet niet hoe het met XML moet maar als het alleen om nieuwsgaat kan je ook gewoon een tekstvak maken en een .txt bestand erin laden

Verwijderd

Topicstarter
ja dat weet ik, maar ik wil nu juist XML inladen :P

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

is het niet this.firstChild ipv nieuws.firstChild?
di's het kortste wat ik hier heb liggen, en dat werkt (met wat html in het htmlletje)
code:
1
2
3
4
5
6
7
8
9
myXML = new XML();
myXML.onload = handleLoad;

function handleLoad() {
   trace(this);
}


myXML.load('test.html')

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


Verwijderd

Topicstarter
trace (this) geeft hetzelfde als trace(nieuws) ... wel krijg ik output : het hele XML document. Hoe kan ik nu een bepaalde node outputten?

Verwijderd

Topicstarter
ook geeft hij als output de complete DTD aan het begin:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE nieuwsBerichten [

    <!ELEMENT nieuwsBerichten   (item)>

    <!ELEMENT datum             (titel, datum, bericht)>

    <!ELEMENT datum             (dag, maand, jaar)>

    <!ELEMENT titel             (#PCDATA)>

    <!ELEMENT datum             (#PCDATA)>

    <!ELEMENT bericht           (#PCDATA)>

]>


is dit misschien waar hij de fout ingaat?

Verwijderd

Topicstarter
Ik heb de DTD nu uit de XML bestand gehaald ... nu gaat Flash al een stuk beter met het bestand om! Het lijkt me overigens sterk dat ik een ongeldig XML bestand (zonder DTD) alleen maar goed kan inladen in flash. Is er een manier waarmee ik bij het inlezen van het bestand het DTD oversla ... ???

voor diegene die dit topic volgens, ik heb nu de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
nieuws = new XML ();
nieuws.onLoad = readData;
nieuws.load("http://www.music2k.nl/new/data/nieuws.xml");

function readData (succes) {
    if (succes) {
        trace ("connection: succesfull");
        for (i=1;i<nieuws.firstChild.childNodes.length;i++) {
            var nieuwsItems = nieuws.firstChild.childNodes[i];
            var titel = nieuwsItems.childNodes[1].childNodes[0].nodeValue;
            trace (titel);
        }
        trace ("connection: closed");
    }
    else {
        trace ("connection: failed");
    }
}


Met de code hierboven haal ik de titel naar Flash toe. Er zit echter nog enkele undefined waardes tussen, dat word de volgende klus dus... hoe komen die daar? waarom zijn die daar en hoe krijg ik ze weg!

Wat ik vreemd vond is dat Flash een tag in XML : dus bv. <nieuwsberichten> als een node zie, maar ook de tekst binnen deze tag ... daardoor moest ik nog een childNode dieper gaan dan dat ik eerst dacht

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
nieuws = new XML ();
nieuws.onLoad = readData;
nieuws.load("http://www.music2k.nl/new/data/nieuws.xml");

function readData (succes) {
    if (succes) {
        trace ("connection: succesfull");
        for (i=1;i<nieuws.firstChild.childNodes.length;i++) {
            var nieuwsItems = nieuws.firstChild.childNodes[i];
            var titel  = nieuwsItems.childNodes[1];
            var dag = nieuwsItems.childNodes[3].childNodes[1];
            var maand= nieuwsItems.childNodes[3].childNodes[3];
            var jaar = nieuwsItems.childNodes[3].childNodes[5];
            var datum = dag.childNodes[0]+"-"+maand.childNodes[0]+"-"+jaar.childNodes[0];
            if (titel.nodeType == 1) {
                trace (titel.childNodes[0]);
                trace (datum);
            }
        }
        trace ("connection: closed");
    }
    else {
        trace ("connection: failed");
    }
}


filtert de undefined waardes eruit, heb dus nu alle titels en data...
kan iemand me vertellen waarom wanneer ik een node verder wil, ik niet opeenvolgende nummers kan gebruiken, maar dat er een waarde 2 bij opgeteld moet worden, zie bv. de dag, maand en jaar, welke ik bereik met childNode[1], childNode[3] en childnode[5] ... beetje vaag vond ik zelf ...

please explain!!! Waarom krijgt flash undefined waardes binnen, waarom leest hij de DTD niet lekker uit en waarom de rare opeenvolging van nummers.

[ Voor 0% gewijzigd door Verwijderd op 14-08-2002 19:35 . Reden: even de code wat opschonen ]


  • Shir
  • Registratie: November 2000
  • Laatst online: 25-11-2025
Misschien heb je hier wat aan... http://www.macromedia.com...script_dictionary770.html

of deze fla

Verwijderd

nb: vergeet niet dat de scope van de onLoad handler het XML object is (this binnen de functie verwijst dus naar het object en bijvoorbeeld niet naar de movieclip). Ik heb al een paar keer gehad dat ik alleen toegang kreeg tot variablen/functies door deze expliciet te prefixen met de movieclip locatie (bijv. _root.nieuwsItem).

Zo te zien gaat het nu goed, maar misschien dat je hier in de toekomst nog tegenaan loopt.

  • El_BingO
  • Registratie: Juli 2001
  • Laatst online: 26-08 12:01
Af en toe is het zeer moeilijk om je gegevens terug te vinden in een XML bestand met Flash. Toen ik ongeveer het zelfde deed, ben ik ook een tijd bezig geweest om de juiste ChildNodes e.d. te vinden. Van mij zou dat ook wel eens wat makkelijker mogen zijn.

Maar goed, zoek en gij zult vinden. ;)

maar moest je nou echt 5 berichten onder elkaar posten?

  • Slakkie_S81
  • Registratie: Juli 2002
  • Laatst online: 19-11-2025

Slakkie_S81

dwaas

je kan het beste de hele xml file in een array gooien in action script, heb dit thuis ook nog ergens staan, zal straks stukje code posten als ik thuis ben, je kan de nieuwsberichten dan gewoon bereiken via bv: nieuws[0].titel enz.
zal rond 7 uur ff posten

hi hi


  • Slakkie_S81
  • Registratie: Juli 2002
  • Laatst online: 19-11-2025

Slakkie_S81

dwaas

had ff tijd, dus heb dit ff snel in elkaar geflanst, kopieer dit stuk code, pas de gegevens aan zoals jij die wil hebben, heb nu alleen titel en bericht gedaan, en alle berichten worden in de array nieuwsberichten geplaatst, deze kan je dan uitlezen door bv: nieuwsberichten[0].titel of nieuwsberichten[0].bericht

er zullen nog wel wat foutjes inzitten, heb het ff snel gemaakt, maar hoop dat je hierdoor verder komt..

voor de datum zul je nog wat moeten aanpassen, maar lijkt me wel dat dat duidelijk is hoe


function Nieuwsbericht(titel, bericht, enz.....)
{
this.titel = titel;
this.bericht = bericht;
}


function makeNieuwsArray(success)
{
var i, mainTag, titel, bericht;
if (success)
{
for (i=0; i<=companyXML.childNodes.length; i++)
{
if (this.childNodes[i].nodeValue == null && this.childNodes[i].nodeName == "nieuwsberichten")
{
mainTag = this.childNodes[i];
}
}


for (i=0; i<=mainTag.childNodes.length; i++)
{
if (mainTag.childNodes[i].nodeName == "item")
{
titel = mainTag.childNodes[i].attributes["titel"];
bericht = mainTag.childNodes[i].attributes["bericht"];

thisNieuwsbericht = new Nieuwsbericht(titel, bericht);
nieuwsberichten.push(thisNieuwsbericht);
delete thisNieuwsbericht;
}
}
}
}


var nieuwsberichten= [];

nieuws = new XML ();
nieuws.ignoreWhite = true;
nieuws.onLoad = makeNieuwsArray;
nieuws.load("http://www.music2k.nl/new/data/nieuws.xml");


edit: nog ff foutje eruit gehaald

hi hi


Verwijderd

Topicstarter
maar moest je nou echt 5 berichten onder elkaar posten?
Ik heb dit gedaan zodat misschien andere mensen ook nog wat hebben aan de problemen waartegen ik aanliep ...
Pagina: 1