JavaScript XML Datei parsen - Problem mit <content:encoded> und <![CDATA[...]]>

david96

Ensign
Registriert
März 2007
Beiträge
218
Hio,

ich parse den RSS2-Feed von tagesschau.de (XML-Datei) per JavaScript. Das klappt auch alles ganz gut. Hier mal ein Code-Ausschnitt:
PHP:
<html>
<head>
<title>RSS Parser Test</title>
</head>

<body>
<input type="button" name="button" value="1" onclick="javascript:doRequest('http://www.tagesschau.de/xml/rss2', 1);">
<input type="button" name="button" value="2" onclick="javascript:doRequest('http://www.tagesschau.de/xml/rss2', 2);">
<input type="button" name="button" value="3" onclick="javascript:doRequest('http://www.tagesschau.de/xml/rss2', 3);">
<input type="button" name="button" value="4" onclick="javascript:doRequest('http://www.tagesschau.de/xml/rss2', 4);">
<div class="newsitem"></div>
<div class="newsitem"></div>
<div class="newsitem"></div>
<div class="newsitem"></div>
<div class="newsitem"></div>
<script type="text/javascript" language="javascript">
// definitions
var http_request = false;
var pg = 1;

function doRequest(url, pge) {
    // testint connection
    /* if(!widget.sysInfo.network.getIsNetworkAvailable()) {
        document.write('Error: Network connection not available');
        return false;
    } */

    // enabling UBR
    try {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
    } catch (e) {}

    // creating request
    http_request = false;
    http_request = new XMLHttpRequest();

    // definition of mime type (text/xml)    
    if (http_request.overrideMimeType) {
        http_request.overrideMimeType('text/xml');
    }

    // testing if request is ok
    if (!http_request) {
        alert('Error: Cannot create XMLHTTP instance');
        return false;
    }

    // definition of page number
    pg = pge;

    // do request & go to parse function
    http_request.open('GET', url, true);
    http_request.onreadystatechange = parseFeed;
    http_request.send(null);
}

function parseFeed() {
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            // getting rss-file
            var xmlstring = http_request.responseText;
            var xmlobject = (new DOMParser()).parseFromString(xmlstring, "text/xml");

            // definitions
            var root     = xmlobject.getElementsByTagName('rss')[0];
            var channels = root.getElementsByTagName("channel");
            var items    = channels[0].getElementsByTagName("item");
            var divs     = document.getElementsByClassName("newsitem");

            // getting current page
            var page = pg;

            // parser
            for (var i=0; i<5; i++) {            
                var itnum = i+(page-1)*5;

                // headline generator
                // -> getting title
                var head = items[itnum].getElementsByTagName("title")[0].firstChild.nodeValue;                
                // -> getting link
                var ref  = items[itnum].getElementsByTagName("link")[0].firstChild.nodeValue;
                // -> creating line
                var line = '<a href="' + ref + '">' + head + '</a>';

                // description generator            
                var desc  = items[itnum].getElementsByTagName("description")[0].firstChild.nodeValue;
                
                // date generator                
                var date = items[itnum].getElementsByTagName("pubDate")[0].firstChild.nodeValue;

                // output...
                divs[i].innerHTML = (line + ' | ' + date + '<br>' + desc + '<br><br>');
            }
        } else {
            alert('Error: There was a problem with the request.');
            return false;
        }
    }
}
</script>
</body>
</html>
Das Problem: Ich möchte auch an die Bilder rankommen. Diese sind aber in einem <content:encoded>Bereich. Das ansich ist ja kein Problem, allerdings ist dadrin ja so ein CDATA Tag. Siehe hier (Beispiel):
Code:
<![CDATA[
<p>
<a href="http://www.tagesschau.de/ausland/weltraumbahnhof100.html"><img src="http://www.tagesschau.de/multimedia/bilder/baikonur106_v-mittel16x9.jpg" alt="Weltraumbahnhof in Baikonur (Foto: picture alliance / dpa)"/></a>
<br/><br/>
-Weitere unwichtige Sachen-
]]>
Das einzige was ich brauche: Den <img>-Tag, daraus src & alt einzeln. Wäre dieser CDATA-Tag nicht da, ginge das ja so (?):
PHP:
items[itnum].getElementsByTagName("content:encoded")[0].p.img.@src;
Hat jemand ne Idee, wie ich mir das Bild da rausfischen könnte?

Grüße

edit: Habs selbst hinbekommen, anstatt firstchild einfach childnode[1] nehmen :D
 
Zuletzt bearbeitet:

Ähnliche Themen

Zurück
Oben