Avatar billede Slettet bruger
18. marts 2007 - 12:11 Der er 9 kommentarer og
1 løsning

XML - jeg bliver sindssyg.

Hej eksperter.

For kort at skitsere problematikken: Jeg har et RSS 2.0 nyhedsfeed, der rummer tags som title, description, pubDate m.m. Men jeg skal også vise billeder - og tagget ser sådan ud:
<media:content>http://www.vandret.dk/billedex.jpg</media:content>

Her er et eksempel på et feed: http://ekstrabladet.dk/?service=rss2feed&mode=screenfeed&listtype=popular&cache300=true

Hidtil har jeg refereret til felterne med this.firstChild.firstChild.childNodes[offset].childNodes[3].attributes.url, men det repræsenterer i sig selv et problem, for nogle gange er der 1 billede - andre gange 2 og enkelte gange slet ingen - så det vil være LANGT mere hensigtsmæssigt at checke på nodenavnet. Derfor bruger jeg XMLSA.as, men er der andre, anbefalelsesværdige måder, er det også fint. Jeg har lagt XMLSA ud på www.vandret.dk/diverse/XMLSA.as
Jeg har også købt RSSreader fra FlashLoaded, men den æder ikke 2.0 feeds korrekt, heller. Øv og 3 gange øv.

Nå, men problemet er, at flash tilsyneladende pure nægter at æde kolon'et. Prøv f.eks. denne kode:

myData = new XMLSA();
myData.load("http://ekstrabladet.dk/?service=rss2feed&mode=screenfeed&listtype=popular&cache300=true");
myData.onLoad = function(ok) {
    if (ok) {
        trace(this.channel.item[1].media:content);
    } else {
        trace("Problem");
    }
};

Jeg vil kende indholdet af media:content-tag'et - og har ledt fra Herodes til Pilatus efter blot antydningen af en lignende problematik, prøvet specialtegnskoder og Gud ved hvad.
Kan nogen kaste en redningskrans ud? Det kunne løse SÅ mange problemer i ét snuptag!
Avatar billede Slettet bruger
18. marts 2007 - 12:13 #1
Avatar billede mat Nybegynder
18. marts 2007 - 12:29 #2
Prøv med;

myData = new XMLSA();
myData.load("http://ekstrabladet.dk/?service=rss2feed&mode=screenfeed&listtype=popular&cache300=true");
myData.onLoad = function(ok) {
    if (ok) {
        trace(this.channel.item[1]["media:content"]);
    } else {
        trace("Problem");
    }
};

mvh mat
Avatar billede kragekjaer Praktikant
18. marts 2007 - 12:34 #3
Du kan sagtens få XML-skrevet ud ved:

myData = new XML();
myData.ignoreWhite=true;
myData.load("http://ekstrabladet.dk/?service=rss2feed&mode=screenfeed&listtype=popular&cache300=true");
myData.onLoad = function(ok) {
    if (ok) {
        trace(this.firstChild.firstChild.childNodes[0]);
        //<title>Ekstra Bladet</title>
    } else {
        trace("Problem");
    }
};

Så er det bare at lave en function som udskriver dem korrekt, så det virker altså fint. Det går galt fordi du kalder indholdet forkert. Brug simpel XML til at navigere dig rundt i indholdet.
Avatar billede kragekjaer Praktikant
18. marts 2007 - 12:36 #4
Mat´s virker fint.
Avatar billede Slettet bruger
18. marts 2007 - 12:53 #5
Ja men for fa'en - trace(this.channel.item[1]["media:content"]); havde jeg også forsøgt, bortset fra at jeg havde et punktum imellem [1] og ["media:content].

Men den er stadig ikke helt umiddelbar, da nogle af nyhederne har 2 billeder og deres tags er identiske. Så hvordan tilgår jeg <media:content> tag nr. 2?

<item>
<title>
Målmanden scorede i Tottenham-sejr
</title>
&#8722;
    <link>http://ekstrabladet.dk/sport/udenlandsk_fodbold/engelsk_fodbold/article281360.ece</link>
&#8722;
    <description>Paul Robinson blev noget overraskende målscorer for Tottenham mod Watford, da keeperen sendte et målspark i kassen</description>
<media:content url="http://ekstrabladet.dk/archive/00242/BRITAIN_SOCCER_242830l.jpg" height="165" width="294"/>
<media:content url="http://ekstrabladet.dk/archive/00242/BRITAIN_SOCCER_242830b.jpg" height="80" width="80"/>
<pubDate>Sat, 17 Mar 2007 17:58:54 +0100</pubDate>
<author>
...


Og tak for input, Kragekjaer. Jeg havde heller ikke problemer med at tilgå XML-info som sådan - men fordi antallet af tags indeni <item> varierer, kunne jeg vanskeligt bruge nummerindexering, uden at skulle anvende en stabel krinklet kode til check på det ene og det andet.

Jubiii!!!
Avatar billede mat Nybegynder
18. marts 2007 - 13:01 #6
Du laver vel bare en løkke der går ind fra childnode 3 og bryder ud når der ikke længere er childnodes med nodeName "media:content"?

mvh mat
Avatar billede Slettet bruger
18. marts 2007 - 13:03 #7
(Øverste linie var blot for at pointere, hvor hjernelam jeg tilsyneladende har været :-)

Men det fungerer skidegodt, bortset fra indexering af identiske tags som beskrevet herover
Avatar billede mat Nybegynder
18. marts 2007 - 13:11 #8
Hvis jeg skriver;

myData = new XMLSA();
myData.load("http://ekstrabladet.dk/?service=rss2feed&mode=screenfeed&listtype=popular&cache300=true");
myData.onLoad = function(ok) {
    if (ok) {
        for ( var i = 0; i < this.channel.item.length; i++ ) {
            trace(this.channel.item[i]["media:content"]);
            trace(i);
        }
    } else {
        trace("Problem");
    }
};

Giver mit output mig begge media:content nodes, fra den sidste item node.

mvh mat
Avatar billede Slettet bruger
18. marts 2007 - 13:13 #9
Nej vent - det virker alligevel som det skal. I ovenstående eksempel returneres et array med 2 resultater i - og så kan jeg bare forespørge på, om der findes noget i indeks 1:

trace(this.channel.item[9]["media:content"][0].attributes.url);
if (!this.channel.item[9]["media:content"][1].attributes.url) {
  trace("Ikke flere billeder at vise");
}

Tusind tak. Smid endelig et svar
Avatar billede mat Nybegynder
18. marts 2007 - 13:16 #10
aight
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