Avatar billede kalleballe Nybegynder
31. januar 2005 - 16:00 Der er 20 kommentarer og
1 løsning

og tegn i xml

Jeg har en cdata xml fil gemt som UTF-8

Jeg kan læse æøå uden problemer, - men ikke '&', - det bliver forvandlet til &

Hvad gør jeg forkert?

vh

KalleBalle
Avatar billede mat Nybegynder
31. januar 2005 - 16:40 #1
Hvordan gør du?
Avatar billede kalleballe Nybegynder
31. januar 2005 - 16:43 #2
jeg bruger IKKE system.useCodepage = true ;)
Avatar billede mat Nybegynder
31. januar 2005 - 16:55 #3
que?
Avatar billede kalleballe Nybegynder
31. januar 2005 - 16:58 #4
øh... kan du ikke bare sige mig hvordan jeg skal få flash til at forstå et 'og' tegn fra en xml fil...
Avatar billede mat Nybegynder
31. januar 2005 - 17:02 #5
Jeg ville gerne sige det, hvis jeg vidste hvor problemet lå. Jeg har ingen problemer med at læse "og" tegn fra CDATA i flash. Det er derfor jeg spørger hvordan du gør. Så kunne det være at jeg kunne få øje på noget?
Avatar billede kalleballe Nybegynder
31. januar 2005 - 17:07 #6
ok her er et eksempel på min xml:

<combobox>
        <comboText><![CDATA[Jewellery & Watches]]>
            <comboTextList><![CDATA[Main]]></comboTextList>
            <comboTextList><![CDATA[Men]]></comboTextList>
        </comboText>
        <comboText><![CDATA[Silver cutlery]]>
etc.

Det er det & tegn der ikke bliver vist rigtigt.


jeg loader min xml således:

var myDoc             = new XML();
    var myDocName         = "XML/data.xml";

myDoc.ignoreWhite     = true;
    myDoc.onLoad         = checkStatus;
   
    myDoc.load(myDocName);

og så:



function checkStatus(success)
    {
        /**
            calling handlers, making data arrays
        **/
       
        if (success)
        {
            /**
                get standard text from xml
            **/
           
            myDoc.sendNodes("catalogues", handleCatalogues);
            myDoc.sendNodes("subHeader", handleSubheader);
            myDoc.sendNodes("comboBoxHeader", handleComboBoxHeader);
            myDoc.sendNodes("select", handleSelect);
           
            /**
                get combobox content
            **/
           
            myDoc.sendNodes("comboText", handleComboText);
           
            /**
                make page
            **/
           
           
            initialize();
           
        } else {
            // if no success we try again
            checkStatus();
        }
    }
Avatar billede kalleballe Nybegynder
31. januar 2005 - 17:08 #7
som du kan se skal det i en combobox men det er ikke det der er problemet, - selv hvis jeg bare tracer variablen så får jeg koden for & i stedet for .... &

vh


KalleBalle
Avatar billede kalleballe Nybegynder
31. januar 2005 - 17:09 #8
og så har jeg denne lille godbid:

XMLNode.prototype.sendNodes = function(searchName, callback)
    {
        /**
            parse XML file.
            looping though xml file to get all relevant data
        **/
       
        for (var i = 0; i<this.childNodes.length; i++)
        {
            var currentNode = this.childNodes[i];
           
            if (currentNode.nodeName == searchName) callback(currentNode);
           
            if (currentNode.childNodes.length>0) currentNode.sendNodes(searchName, callback);
           
        }
    };
Avatar billede mat Nybegynder
31. januar 2005 - 17:22 #9
Ja den ledte jeg efter..

Et gæt:

XMLNode.prototype.sendNodes = function(searchName, callback)
    {
        /**
            parse XML file.
            looping though xml file to get all relevant data
        **/
     
        for (var i = 0; i<this.childNodes.length; i++)
        {
            var currentNode = this.childNodes[i];
         
            if (currentNode.nodeName == searchName) callback(currentNode.nodeValue);
         
            if (currentNode.childNodes.length>0) currentNode.sendNodes(searchName, callback);
         
        }
    };
Avatar billede mat Nybegynder
31. januar 2005 - 17:26 #10
Jeg elsker udokumenterede objekter, NOT...

"Though it's not documented in the AS dictionary, XML is a subclass derived from XMLNode, which extends XMLNode with some more methods such as 'load'. An XML object can only be used to wrap the aggregation of nested XMLNode objects."
Avatar billede barklund Nybegynder
31. januar 2005 - 18:20 #11
Ja, du skal bare bruge .nodeValue attributten på den xml-node som du finder. Jeg ville egentlig fjerne det fra sendNodes-metoden igen og implementeret det i din callback istedet som:

function minCallback(node) {
    trace(node.nodeValue);
}

Det virker lidt smartere og lidt mere generelt :)

Og hvad er det her for noget?

... else {
    // if no success we try again
    checkStatus();
}

Tror du betingelserne har ændret sig ved næste funktionskald, som sker øjeblikkeligt? Aldrig nogensinde. Prøv at pege din xml.load hen på en fil, der ikke findes, og se resultatet - too many recursions. Sådan laver man ikke fejlhåndtering, min fine ven :)

--
Morten Barklund
Avatar billede kalleballe Nybegynder
31. januar 2005 - 18:41 #12
hehe, - nå nej, - det gør man vel ikke ;)

Tak for hjælpen, - jeg ser på det i morgen.

vh

KalleBalle
Avatar billede kalleballe Nybegynder
01. februar 2005 - 09:22 #13
g'morgen, hm, jeg fatter vist ikke helt hvad det hjælper at får nodeValue, - den siger mig jo bare om det er en text node eller en xml node, - og det er jo en xml node.. så den er altså null, - hvordan giver det mig et og tegn??
Avatar billede kalleballe Nybegynder
01. februar 2005 - 09:26 #14
ps. jeg har lave min else om til bare at skrive en error besked, - det er vel ok :)
Avatar billede kalleballe Nybegynder
01. februar 2005 - 10:10 #15
ka' I ikke lige sige mig hvorfor dette ikke virker?

    var tf                 = new TextFormat ();
    tf.color             = 0x00CC00;
    tf.font             = "tahoma";
    tf.align             = "left";
    tf.size             = 10;
    tf.url                = "http://www.dr.dk";

altså tf.url

det andet virker nemlig...
Avatar billede barklund Nybegynder
01. februar 2005 - 12:26 #16
Din sidste kommentar har vist ikke noget med dette at gøre, men med hensyn til den tredjesidste, så tager du fejl. nodeValue er metoden, som man på rigtig vis henter indholdet af en tekstnode ud. Den er korrekt null for en almindelig XML-node men ikke for en tekstnode - der er det den korrekte repræsentation af data.

nodeType derimod er nok den attribut du beskriver. Den er nemlig 1, hvis noden er en almindelig node og 3 hvis noden er en tekstnode.

Så kommer vi ned til det faktu, at din CDATA-tags er tekstnoder (nodeType=3) og værdien kan hentes ud med nodeValue. Hvis dette ikke er tilfældet for dig, så har du lavet en fejl et sted.

Umiddelbart tror jeg, at du skal rette i dine handler-metoder (handleComboText etc.) hvor du skal tilføje .nodeValue for at læse teksten i noden og ikke bare nodens toString-metode.

--
Morten Barklund
Avatar billede kalleballe Nybegynder
01. februar 2005 - 12:30 #17
Jammen det er jo helt rigtigt, - mange tak, - perfekt, - det virker :)

Og ja det sidste har intet med noget at gøre, - men jeg fatter det blot ikke..
Avatar billede barklund Nybegynder
01. februar 2005 - 12:33 #18
TextFormat.url er noget rodet noget - brug det ikke :)
Avatar billede kalleballe Nybegynder
01. februar 2005 - 12:34 #19
har du et andet forslag til at få teksten til at opføre sig som et link?
Avatar billede barklund Nybegynder
01. februar 2005 - 12:39 #20
Smid en knap ind over eller brug html - det gør vi andre :)

Og tark for points :)
Avatar billede kalleballe Nybegynder
01. februar 2005 - 12:39 #21
ok, tak skal du ha'
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