Avatar billede casperc Nybegynder
25. september 2007 - 10:26 Der er 11 kommentarer og
2 løsninger

cdata i xml

Jeps, endnu et af disse spørgsmål fra en flash-nybegynder.

Jeg har følgende XML-fil:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<indhold>
  <Entry1 tekst="tekst teskt tekst" link="http://www.casperc.dk" billede="http://caspertest.clickasite.dk/6storage/614/1/billede1.jpg"/>
  <Entry2 tekst="tekst teskt tekst" link="http://www.casperc.dk" billede="http://caspertest.clickasite.dk/6storage/614/1/billede2.jpg"/>
  <Entry3 tekst="tekst teskt tekst" link="http://www.casperc.dk" billede="http://caspertest.clickasite.dk/6storage/614/1/billede3.jpg"/>
  <Entry4 tekst="tekst teskt tekst" link="http://www.casperc.dk" billede="http://caspertest.clickasite.dk/6storage/614/1/billede4.jpg"/>
</indhold>


Min fla-fil ser sådan ud:


System.useCodepage = true;
var myXML:XML = new XML();
myXML.ignoreWhite = true;
myXML.onLoad = processXML;


function processXML(success:Boolean) { // Function
    if (success) {
        var total:Number = this.firstChild.childNodes.length;
        var randmNum:Number = Math.floor(Math.random()*total);

        indhold = (this.firstChild.childNodes[randmNum].attributes.tekst);
        billede = (this.firstChild.childNodes[randmNum].attributes.billede);
        url = (this.firstChild.childNodes[randmNum].attributes.link);

        myContent()

        } else {
        content = "indhold ikke fundet!";
    }
}

myXML.load("xml-file.xml?ck=" + new Date().getTime());


//////////////////////////////

refresh.onRelease = function() {
    startOver();
};

function myContent() {
        picture.loadMovie(billede, 1);
        txt.htmlText = indhold;
    }

LinkArea.onRelease = function() {
  getURL(url,"_blank");
};

init();
stop();





XML-filen bruges til at generere en random flash-ting, hvor alle felterne i hvert entry vises i hver rotation. Jeg vil gerne kunne bruge linieskift i tekstfeltet, men jeg kan ikke helt greje hvordan jeg sætter CDATA tag'et ind.

A little help guys...
Avatar billede barklund Nybegynder
25. september 2007 - 10:35 #1
Du er nødt til at pakke dine attributter ud som noder istedet:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<indhold>
  <Entry1>
    <tekst>tekst teskt tekst</tekst>
    <link>http://www.casperc.dk</link>
    <billede>http://caspertest.clickasite.dk/6storage/614/1/billede1.jpg</billede>
  </Entry1>
  ...

Derudover, at kalde sine noder for "entry1", "entry2" og så videre virker misforstået - de bør alle hedde "entry". Du nummererer jo heller ikke html-tags på den måde (udover h1-h6, men det er noget andet).
Avatar billede casperc Nybegynder
25. september 2007 - 10:52 #2
Okay, det lyder meget rimeligt. Og så smide cdata på sådan her?

<tekst><!CDATA[tekst teskt tekst]]></tekst>

Det giver mening. Men umiddelbart forstår jeg ikke din kommentar mht. nummerering. Jeg vil jo gerne have vist de forskellgei rotationer random, og den flash-filen skal vel kunne se forskel på de forskellige entries?!?
Avatar billede barklund Nybegynder
25. september 2007 - 11:22 #3
Flash-filen kan sagtens se forskel på entries. Du kan jo bare smide alle entries i et array eller noget (hvilket du også gør pt.).
Avatar billede casperc Nybegynder
25. september 2007 - 11:47 #4
Okay... tror lige jeg stod af et kort øjeblik. Er første gang jeg arbejder med nodes på den måde. Håber du kan bære over med mig.

Så nu har jeg en XML fil der ser sådan ud:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<indhold>
  <entry>
    <tekst>tekst teskt tekst</tekst>
    <link>http://www.casperc.dk</link>
  </entry>
  <entry>
    <tekst>mere tekst mere tekst</tekst>
    <link>http://www.klaphat.dk</link>
  </entry>



Hvordan kalder jeg så dem inde i flashfilen, når jeg ikke længere kan bruge

indhold = (this.firstChild.childNodes[randmNum].attributes.tekst);

Og samtidig vil bruge min random-funktion?
Avatar billede rookieboy Nybegynder
26. september 2007 - 08:43 #5
Du skal jo ikke hente din xml data random. Du læser din data ind, dumper det i et array, og så laver du random på dit array i stedet.
Avatar billede barklund Nybegynder
26. september 2007 - 09:20 #6
Altså, om du bruger din xml "random" eller et array er faktisk ligegyldigt, da din xml er parset ind og ligger som arrays. Men det er da nemmest at bruge et array da det ligger som en mere kompakt struktur. Hvis du vil bruge dit xml-objekt så er det bare:

tekst = this.firstChild.childNodes[randmNum].childNodes[0].firstChild.nodeValue;
link = this.firstChild.childNodes[randmNum].childNodes[1].firstChild.nodeValue;

:)

--
Morten Barklund
Avatar billede casperc Nybegynder
05. oktober 2007 - 15:01 #7
Glimrende...

Jeg har lagt hovedet i blød, og er kommet op med en ny opsætning af det hele. XML filen ser nu således ud:



<?xml version="1.0" encoding="iso-8859-1" Standalone="yes"?>
<galleri>
    <rotation>
        <billede>http://caspertest.clickasite.dk/6storage/614/1/billede1.jpg</billede>
        <overskrift>billede1</overskrift>
        <tekst><![CDATA[dfdgf <br>sdfsd<br>sdffs]]></tekst>
        <tekst2>tekst tekst tekst 1</tekst2>
    </rotation>
    <rotation>
        <billede>http://caspertest.clickasite.dk/6storage/614/1/billede2.jpg</billede>
        <overskrift>billede2</overskrift>
        <tekst>tekst tekst 2</tekst>
        <tekst2>tekst tekst tekst 2</tekst2>
    </rotation>
    <rotation>
        <billede>http://caspertest.clickasite.dk/6storage/614/1/billede3.jpg</billede>
        <overskrift>billede3</overskrift>
        <tekst>tekst tekst 3</tekst>
        <tekst2>tekst tekst tekst 3</tekst2>
    </rotation>
</galleri>



Og det virker fint, på nær at flash'en udskriver br-tag'et som tekst. Og jeg HAR sat tekstboksen til at rendere som HTML. Hvad poker gør jeg galt?
Avatar billede casperc Nybegynder
05. oktober 2007 - 15:04 #8
For god ordens skyld så ser min flashfil nu sådan ud:


_xml = new XML();
_xml.ignoreWhite = true;
_xml.wordWrap = true;
_xml.onLoad = function(ok) {
    if (ok) {
        gallery_array=makeGalleryArray(this);
        processXML(gallery_array);
    }
};
_xml.load("gallery.xml");
function makeGalleryArray(_xml) {
    var _array=new Array();
    root_xml = _xml.firstChild;
    for (var r in root_xml.childNodes) {
        var image_obj=new Object();
        billede_xml = root_xml.childNodes[r];
        for (var b in billede_xml.childNodes) {
            image_obj[billede_xml.childNodes[b].nodeName]=billede_xml.childNodes[b].firstChild;
        }
        _array.push(image_obj);
    }
    _array.reverse();
    return _array;
}



function processXML(gallery_array:Boolean) { // Funktion
    if (gallery_array) { // Hvis XML filen bliver hentet korrekt - Kør dette.
       
        indhold =  gallery_array[0].tekst ; // Opretter varialbel ud fra noden tekst.
        billede = (gallery_array[0].billede); // Opretter variabel ud fra noden billede1.

        myContent()

        } else {
        content = "indhold ikke fundet!";
    }
}


refresh.onRelease = function() {
    startOver();
};

function myContent() {
        picture.loadMovie(billede, 1);
        picture2.loadMovie(billede2, 2);
        txt.htmlText = indhold;
    }

   
function startOver() {
    gotoAndPlay(2);
}


LinkArea.onRelease = function() {
  getURL(url,"_blank");
};

init();

stop();
Avatar billede barklund Nybegynder
05. oktober 2007 - 15:39 #9
image_obj[billede_xml.childNodes[b].nodeName]=billede_xml.childNodes[b].firstChild.nodeValue;
Avatar billede casperc Nybegynder
05. oktober 2007 - 16:20 #10
Billederne virker fint. Det er br-tag'et der driller!
Avatar billede casperc Nybegynder
05. oktober 2007 - 16:27 #11
Anyway, jeg har flash-filen ned, og nu virker det... Ikke helt som jeg havde håbet. Men sådan er det jo nogen gange :-)

Barklund, smid lige et svar, så får du nogle points.
Avatar billede casperc Nybegynder
05. oktober 2007 - 16:28 #12
... barberet flash filen ned.
Avatar billede barklund Nybegynder
08. oktober 2007 - 15:37 #13
Finfin :)
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