Avatar billede andersoe Nybegynder
17. maj 2011 - 23:38 Der er 1 løsning

Problem med xml i flash

Hej

Jeg har lavet et online-værktøj til redigering af rss-feed, som er lavet ud fra denne http://www.kirupa.com/web/xml/examples/newseditor.htm
Det er ment som en slags podcast-feed. Jeg har en simpel xml, som er således:

<rss>
<item>
<title>En titel</title>
<description>Beskrivelse</description>
<enclosure url="link til lydfil">link til download</enclosure>
</item>
</rss>

Alt dette kan jeg oprette online, men problemet er, at jeg ikke kan se url-enclosuren når denne er oprettet, og hvis jeg går ind for at ændre url'en, så er det kun enclosuren, som er synlig. Det er lidt dårligt forklaret, så her er min actionscript-kode.


GetTitleText = function(news_xml, entry_index){
    var entries = news_xml.firstChild.childNodes;
    var title_element = entries[entry_index].firstChild;
    return title_element.firstChild.nodeValue;
}
GetBodyText = function(news_xml, entry_index){
    var entries = news_xml.firstChild.childNodes;
    var body_element = entries[entry_index].firstChild.nextSibling;
    return body_element.firstChild.nodeValue;
}
GetLinkText = function(news_xml, entry_index){
    var entries = news_xml.firstChild.childNodes;
    var link_element = entries[entry_index].firstChild.nextSibling.nextSibling;
    return link_element.firstChild.nodeValue;
}
GetAudioText = function(news_xml, entry_index){
    var entries = news_xml.firstChild.childNodes;
    var audio_element = entries[entry_index].firstChild.nextSibling.nextSibling;
    return audio_element.firstChild.nodeValue;
}
GetEntry = function(news_xml, index){
    var entries = news_xml.firstChild.childNodes;
    return entries[index];
}
GetNewsCount = function(news_xml){
    var entries = news_xml.firstChild.childNodes;
    return entries.length;
}

ShowNews = function(news_xml){
    if (!news_xml.firstChild.hasChildNodes()){
        content_txt.text = "Audio er ikke tilgængelig!";
        return (0);
    }
    var entries = news_xml.firstChild.childNodes;
    content_txt.text = "";
    for (var i=0; i<entries.length; i++){
        var title = GetTitleText(news_xml, i);
        var beskrivelse = GetBodyText(news_xml, i);
        var link = GetLinkText(news_xml, i);
        var audio = GetAudioText(news_xml, i);
        content_txt.htmlText += "Titel:        <b>" + title +"</b><br>"
        content_txt.htmlText += "Artist:        <b>" + artist +"</b><br>"
        content_txt.htmlText += "MP3-link:    <b>" + audio +"</b><br>"
        content_txt.htmlText += "Download:    <b>" + link +"</b><br>"
        content_txt.htmlText += "-----------------------------------------------------------------------------------------------------------------------------<br>"
    }
}

AddNewsEntry = function(news_xml, title, beskrivelse, link, audio){
    var entryNode = news_xml.createElement("item");
   
    if (title == "") title = "(none)";
    var titleNode = news_xml.createElement("title");
    var titleText = news_xml.createTextNode(title);
    titleNode.appendChild(titleText);
    entryNode.appendChild(titleNode);
   
    if (beskrivelse == "") beskrivelse = "(none)";
    var bodyNode = news_xml.createElement("description");
    var bodyText = news_xml.createTextNode(beskrivelse);
    bodyNode.appendChild(bodyText);
    entryNode.appendChild(bodyNode);
   
    if (link == "") link = "(none)";
    var linkNode = news_xml.createElement("enclosure");
    var linkText = news_xml.createTextNode(link);
    linkNode.appendChild(linkText);
    entryNode.appendChild(linkNode);
   
    if (audio == "") audio = "(none)";
    var audioNode = news_xml.createElement("enclosure");
    var audioText = news_xml.createTextNode(audio);
    audioNode.attributes.url = audio;

    if (news_xml.firstChild.hasChildNodes()){
        news_xml.firstChild.insertBefore(entryNode, news_xml.firstChild.firstChild);
    }else news_xml.firstChild.appendChild(entryNode);
   
    while (GetNewsCount(news_xml) > max_news_items){
        news_xml.firstChild.lastChild.removeNode();
    }
}

EditNewsEntry = function(news_xml, node_index, title, beskrivelse, link, audio){
    var entry = GetEntry(news_xml, node_index);
    if (title == "" && artist == "" && itunes == ""){
        entry.removeNode();
        return (0);
    }else{
        if (title == "") title = "(none)";
        if (beskrivelse == "") beskrivelse = "(none)";
        if (link == "") link = "(none)";
                if (audio == "") audio = "(none)";
    }
    var titleTextNode = entry.firstChild.firstChild;
    var bodyTextNode = entry.firstChild.nextSibling.firstChild;
    var linkTextNode = entry.firstChild.nextSibling.nextSibling.firstChild;
    titleTextNode.nodeValue = title;
    bodyTextNode.nodeValue = beskrivelse;
    linkTextNode.nodeValue = link;
        audioTextNode.nodeValue = audio;
}


SaveNews = function(news_xml){
    content_txt.htmlText = "<i>Gemmer og henter listen...</i>";
    news_xml.xmlDecl = ""; // fixes duplication bug
    news_xml.sendAndLoad(save_script, news_xml);
}
RefreshNews = function(news_xml){
    content_txt.htmlText = "<i>Henter listen...</i>";
    news_xml.load(xml_file);
}

Hvis man udfylder formen, så får man ovenstående xml-fil, men hvis jeg opdaterer og kigger på de forskellige felter, så fremtræder linket til download (enclosuren) både i mp3-fil og i download.

Jeg ved det er fordi disse er ens:

GetLinkText = function(news_xml, entry_index){
    var entries = news_xml.firstChild.childNodes;
    var link_element = entries[entry_index].firstChild.nextSibling.nextSibling;
    return link_element.firstChild.nodeValue;
}
GetAudioText = function(news_xml, entry_index){
    var entries = news_xml.firstChild.childNodes;
    var audio_element = entries[entry_index].firstChild.nextSibling.nextSibling;
    return audio_element.firstChild.nodeValue;
}

Men hvordan får jeg url'en i enclosuren til at fremgå i feltet: "mp3-fil"?
Avatar billede andersoe Nybegynder
19. maj 2011 - 12:51 #1
Jeg fandt selv en løsning på visningen:

GetAudioText = function(news_xml, entry_index){
    var entries = news_xml.firstChild.childNodes;
    var audio_element = entries[entry_index].firstChild.nextSibling.nextSibling.attributes.url;
    return audio_element;
}

Ved at fjerne .firstChild.nodeValue fra return, så kan jeg nu se GetAudioText når jeg loader xml-filen.

Problemet er nu bare, at audio_element ikke har en nodeValue og derfor ikke kan rettes når man udfylder formen?
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