Knowledge Base Nr: 00269 ajax6.txt - http://www.swe-kaiser.de

Ajax: Newsfeeder zyklisch auslesen und anzeigen (XML, XSLT, HTTPRequest)

  
achtung: funktioniert nicht unter Firefox 1.5.0.3!
hinweise:
- ausprobieren unter internet explorer (bessere debugmöglichkeit)
- alle nichtbenutzten xml-elemente in xsl-file behandeln um sie zu unterdrücken
- xml-daten müssen über serverscript geholt werden, da aus sicherheitsgründen vom browser geblockt
- browserunabhängig durch verwendung von zxml.js (kostenlose bibliothek http://www.nczonline.net/downloads/)

folgende vorgehensweise:
- xml-daten über serverscript holen
- xsl-file einlesen
- transformieren xml nach html
- ausgabe der daten im browser

##################### php-script zum holen der xml-daten

<?
#fügt header ein um das cachen durch den browser zu verhindern
header("Pragma: no-cache");
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Thu, 01 Dec 1994 16:00:00 GMT");

$ctype = urlencode($ctype);
header("Content-Type: $ctype");

$url = urldecode($url);

$content = file($url);

foreach ($content as $line)
echo($line);
?>

##################### xsl-datei zum transformieren von xml nach html

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes" indent="yes" />

<xsl:template match="/">
<b>Nachrichten:</b><br />
<xsl:apply-templates />
</xsl:template>

<xsl:template match="channel/image">
</xsl:template>

<xsl:template match="channel/title">
</xsl:template>

<xsl:template match="channel/link">
</xsl:template>

<xsl:template match="channel/language">
</xsl:template>

<xsl:template match="channel/description">
</xsl:template>

<xsl:template match="channel/item">
<xsl:variable name="varLink" select="link" />

<a target="news" href="{$varLink}"><xsl:value-of select="title" /></a><br />

</xsl:template>
</xsl:stylesheet>

##################### html-datei mit javascript

<head>
<title>Index</title>

<script type="text/javascript"src="zxml.js"></script>

<script type="text/javascript">

var sID = "newsticker";
var urlFeed = 'k_getURL.php3?url=http://www.spiegel.de/schlagzeilen/rss/0,5291,20,00.xml&ctype=text/xml';

function loadNews()
{
var oXmlHttp = zXmlHttp.createRequest();
oXmlHttp.open("get", encodeURI(urlFeed), true);

oXmlHttp.onreadystatechange = function ()
{
if (oXmlHttp.readyState == 4)
{
if (oXmlHttp.status == 200)
{
var oXmlDom = zXmlDom.createDocument();
oXmlDom.async = false;
oXmlDom.loadXML(oXmlHttp.responseText);

var oXslDom = zXmlDom.createDocument();
oXslDom.async = false;
oXslDom.load("k_newsticker.xsl");

var str = zXslt.transformToText(oXmlDom, oXslDom);

var newsBox = document.getElementById(sID);
newsBox.innerHTML = str;

setTimeout(loadNews, 5*60*1000); //alle 5 minuten updaten
}
}
};
oXmlHttp.send(null);
}

window.onload = function ()
{
if (zXmlHttp.isSupported())
{
loadNews();
}
}

</script>

</head>

<body">

<p>the quick brown fox jumps over the...
</p>

<p>
<span id="newsticker">hier kommt ein newsticker...</span>
</p>

<p>...the laszy dog.
</p>

</body>
</html>