Knowledge Base Nr: 00269 ajax6.txt - http://www.swe-kaiser.de
Downloads:
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>