XSLT-"Programme" auch in Programmvorstellungen?

Marnem

Fleet Captain Special
Mitglied seit
09.12.2001
Beiträge
263
Renomée
0
Standort
München
Moin!
Gehören XSLT-Programme auch in den Thread "Programmvorstellungen"?
Oder aus eher geringer Schöpfungshöhe nur in nen normalen Thread?

Ich hab hier mal ein einfaches XSLT-Programm geschrieben, daß den rdf-Newsfeed der heute-Nachrichten in eine XHTML Seite umwandelt. Ein User öffnet ein XHTML File, das lädt das xsl Stylesheet, das Styhlsheet lädt den Newsfeed, baut ne XHTML Seite draus und zeigt sie an. Mit kleinen Änderungen an der xsl Datei, kann man die Ausgabe nach seinem gusto anpassen oder in seine eigene Webseite einbauen.

Hier das XSLT Programm:
Code:
<?xml version="1.0" encoding="ISO-8859-15"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:dc="http://purl.org/dc/elements/1.1/" version="1.0">
  <xsl:output method="html"/>
   
  <xsl:template match="/">
  <html>     
  <body>   
  <h2>Die aktuellen ZDF-Heute Nachrichten</h2> 
    <table border="1">   
    <tr>  
    <th align="left"> Überschrift</th>
    <th align="left">Link</th></tr>
   <xsl:apply-templates></xsl:apply-templates>
    </table>
    <p>
		Written by Korbinian Schoder <br/>
		18.07.2004 <br/>
		Version 1.0<br/>
    </p>
    </body>
    </html>
 </xsl:template>
    
 <xsl:template name="channel" match="*[local-name()='channel']">
    <tr><strong><xsl:apply-templates/></strong></tr>
 </xsl:template>
    
 <xsl:template name="desc" match="*[local-name()='description']" /> <!-- suppress -->
    
 <xsl:template name="item" match="*[local-name()='item']">
    <tr><xsl:apply-templates/></tr>
 </xsl:template>

  <xsl:template name="title" match="*[local-name()='title']">
  <td><em><xsl:apply-templates/></em></td>
  </xsl:template>

  <xsl:template name="link" match="*[local-name()='link']">
  <xsl:variable name="hreflink" select="../*[local-name()='link']"/>
  <td>
  <a target="_blank"><xsl:attribute name="href"><xsl:value-of select="." /></xsl:attribute><xsl:value-of select="." /></a>
  </td>
  </xsl:template>
  
  <xsl:template match="language"/>  <!-- suppress -->
</xsl:stylesheet>
Hier eine kleine html Seite, wo es eingebaut is (geht nur mit ie 6.0, leider):
HTML Seite
 
Wenn du es hinbekommst, dass es mit allen Browsern funktioniert...

Wäre auch nett, wenn du den Source mit dazuschreiben könntest. Die GPL gibts nicht umsonst, gerade aus solchen kleinen Programmen die sich auf das Wesentliche konzentrieren kann man gut lernen (ich kannte XSLT bisher zb. garnet).
 
XML ist ne verdammt interessante Geschichte, aber XSL mit Schemas und Stylesheets sind auch recht komplex.
Aber ich denke, der Code ist ein gutes und einfaches Beispiel der praktsichen Anwendung.

Hast du eine Ahnung, warum es nur mit dem IE funzt?

MfG
 
@Intel-hasser
Der Source des XSLT Programms steht ja da ^^

Warum es nur mitm IE funktioniert:
Das XSLT Prog funktioniert sicher auch mit Mozilla, Opera, etc , aber das ist ned fest mit dem heute-nachrichten newsfeed verdrahtet. Also brauch ich ne html-Seite, die der User aufruft und die bewirkt, daß das XSLT Programm auf den newsfeed angewandt wird.
Bloß leider weiß ich (noch) ned, wie ich die zu startende Webseite für die anderen Browser gestalten muß. Beim IE muß ich nämlich den XSLT auswerter und parser erst "per Hand" starten.

Code:
<html>
<body>

<script type="text/javascript">
// Load XML 
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load("http://www.heute.t-online.de/ZDFheute/infoservices/rss-feed");

// Load the XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load("http://www.marnem.de/heute-nachrichten_newsfeedtransform.xsl");

// Transform
document.write(xml.transformNode(xsl));
</script>

</body>
</html>

Wobei ich sagen muß, daß ich das Javascript aus den Beispielseiten des W3C hab, vielleicht gehts ja auch viel einfacher und besser.
 
Wart mal, seh ich da gerade ActiveX? Das kann nicht auf anderen Plattformen funktionieren, ist also rein Win32 speziefisch. Dazu dürfte es mit anderen Browsern auch net klappen, weil die zum Glück kein ActiveX (-> Sicherheitslücke nummero 1) können.
 
Kleine Erklärung zu XSLT:
XSLT ist eine Transformationssprache zu XML. mit XSLT kann man XML Dateien zu allem möglichen, was einem einfällt verbrutzeln (PDF, XHTML, WML, etc).
Nun kann man XSLT an 2 Orten einsetzen. Am Server oder am Client.
Aufm Server könnte man seine XML Dateien zB. zu einem festgelegten Zeitpunkt oder aber auch bei Aufruf eines Triggers umwandeln. Dazu ist es aber nötig die XML Daten selbst vorliegen zu haben. Dies ist bei dem newsfeed aber nicht der Fall.
Darum bleibt hier nur die Umwandlung beim Client. Dazu kommt noch die Problematik, daß ich die XML-Daten nicht mit meinem XSLT Programm verknüpfen kann (hab ja keinen Einfluß auf den newsfeed). Darum brauche ich den Umweg der aufzurufenden HTML Seite, denn diese kann das XSLT Programm auf die XML Daten anwenden. Wenn ich die XML-Daten verändern könnte, könnte ich dort nen Verweis aufs XSLT Programm machen und die Sache liefe ohne Probleme.
Im Falle vom IE gibts wohl nur diese Möglichkeit via Javascript und ActiveX den XSLT Parser zu aktivieren, wenns halt ned schon vom XML-File gemacht wird.
Mozilla hat auch eine XSLT-Parser namens TransforMIIX. Allerdings hab ichs noch ned geschaft, ihn dazu zu bringen, das XSLT Programm auszuführen. Weder per Einbinden in die XML Datei (hier is entweder der Mozilla ned Standardkonform oder ich zu doof) noch per Javascript (obwohl ich ein Beispiel abgeschrieben hab).
 
Hmm ok. Also wenn du die Sache so hinbekommst, dass es nicht nur auf dem IE läuft kann das gerne in die Programmvorstellung. Rein IE speziefische Sachen gibts schon viel zu viele, und ich denke wir müssen m$HTML hier nicht weiter unterstützen ;).
 
Damit ich es richtig verstehe:

Wir haben externe XML Daten und wir haben ein lokales XSL Stylesheet.
Da man das Stylesheet nicht in die externe XML Datei einbinden kann, binden wir die externen XML Daten in eine eigene Site ein und wenden darauf das Stylesheet an.

Problematik dabei: Die XSL Prozessoren der Browser anzusprechen

Lösungsvorschlag: Serverseitige Implementierung

Lösungsweg: Hier fangen die Probleme an. Zum einen braucht man einen Server mit XSL Prozessor. Zum anderen muss man das ganze so automatisieren, dass bei Aufruf eines Dokuments die XML Daten von extern geladen und dann per Stylesheet weiterverarbeitet werden.

Korrekt?

MfG
 
Ja ist korrekt.

Geht aber recht einfach z.B. mit einem Servlet, das die Daten via URLConnection lädt und dann per Xalan die Transformation durchführt und den generierten HTML Code per Response an den Browser liefert.
Hatte ich in meinem letzten Projekt gemacht. Hatte jeweils ein 2000 Zeilen Stylesheet, welche HTML und PDF (via FOP) generieren können.

Sind nur ein paar Zeilen Java Code. Leider brauch man dazu einen Application Server alla Tomcat, den man bei fast keinem Provider hosten kann.

Mit PHP oder ähnlichem gehts aber natürlich auch, aber ich find das XML handling bei PHP irgendwie nicht so komfortabel.
 
Ne Serverseitige Lösung ist für mich ned praktikabel, weil ich nur so ne billigdomain hab, ohne alles interaktive.

Hab mich noch 2 Stunden mit dem Mozilla gespielt. Jetzt kann ich auch mit dem Mozilla den Newsfeed anzeigen, allerdings nur, wenn die XML Daten, das XSLT Programm und die HTML-Startseite auf dem selben Server sind. Mit dem "echten" newsfeed gibts ne Javascript Fehlermeldung:
Code:
Error: [Exception... "'Permission denied to call method XMLDocument.load' when calling method: 
[nsIDOMEventListener::handleEvent]"  nsresult: "0x8057001e (NS_ERROR_XPC_JS_THREW_STRING)"  
location: "<unknown>"  data: no]

Zum testen:
Alle Files aufm selben Server (news von Dienstag Mitternacht)

Mit "echtem" newsfeed
 
hmm... nein. Nur der 1. Link. Ich hab mich mit den Hintergründen jetzt so ziemlich garnet beschäftigt, hab nur gesehen, dass einer der Links funktioniert hat ;)
 
hi marnem,

ich verfolge diesen thread schon seit erstellung.
ich benutze den ie6 (mit allen zur zeit erhaeltlichen updates) und muss sagen, das der link im ersten post bei mir nicht funktioniert.
gibt es denn sicherheitsrelevante einstellungen am ie, die fuer die ausfuehrung, notwendig sind?

gruss tes.
 
Moin tes!
Jo, leider muß sowohl ActiveX also auch Javascript aktiviert sein, damit der Link mitm IE geht.

Btw, der Newsfeed is ned immer aufm neuesten Stand. Aussage des ZDF dazu:
Code:
Das von Ihnen beschriebene Problem ist uns leider nicht unbekannt und wir arbeiten bereits an dessen Lösung.
Der Code des RDF-Tickers wird immer refreshed, wodurch die Nachrichten normalerweise auch immer auf dem gleichen, aktuellen Stand  der Homepage sein müssten. Die eigentlichen Schwierigkeiten, die sich in der Zeitverzögerung der Darstellung ausdrücken, resultieren aus Problemen mit dem Caching. 
 
Wir bitten Sie um Ihr Verständnis und verbleiben, 
 
mit freundlichen Grüßen aus Mainz,
 
Katja Augustin
Gruppe ZDF-Webmaster
 
also bei mir kommt ne leere seite an, mit folgendem quellcode:

Code:
<html>
<body>

<script type="text/javascript">
// Load XML 
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.load("http://www.heute.t-online.de/ZDFheute/infoservices/rss-feed");

// Load the XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM");
xsl.async = false;
xsl.load("http://www.marnem.de/heute-nachrichten_newsfeedtransform.xsl");

// Transform
document.write(xml.transformNode(xsl));
</script>

</body>
</html>

gruss tes
 
Guck mal nach, ob bei dir ActiveX eingeschaltet is (is ne gefährliche Sache. mit ActiveX gibts ettliche Sicherheitslücken).
 
ja, ich weiss. :)
es war zum testen aktiviert mit eingabeauforderung.
ich glaube mein popupblocker hat die nachfrage abgeblockt.
aber es funktioniert jetzt.
die frage ist nur, wann setz ich solch ein script ein, wenn niemand mehr activx erlaubt/aktiviert.
zum testen der moeglichkeiten von webanwendungen ist es aber ganz interessant.

gruss tes
 
Tja, jetzt sind wir an nem Wunden Punkt 8)

Ich hab dieses Semester die Vrlesung "Markup-Sprachen" gehört, wo wir einige der Sprachen im XML Dunstkreis gelernt haben (XML, XHTML, XSchema/DTD, XPath, XSLT, XQuery). Und ich war grad am lernen für die Klausur, wie ich das mit dem newsfeed gelesen hab. War ne nette Ablenkung vom Lernen (Klausur trotzdem bestanden). Und weil ich ActiveX aktiviert hab, is mir das Problem erst auf intel_hasser's Kommentar hin bewußt geworden.
Gedanken über den Sinn des ganzen hatte ich mir also weiter ned gemacht. Immerhin hab ich so aber einiges über Mozilla gelernt und für die Zukunft weiß ich, daß man XSLT nur aufm Server einsetzen sollte.
 
Naja nicht zwangsläufig nur auf dem Server.
Wenn man den XML Content selbst liefern kann besteht auch die Möglichkeit den Link zu einem Stylesheet mitzugeben und den Browser trotzdem die Transformation ausführen zu lassen.

Das können soweit ich weiß der IE min. ab Version 5.5 (5.0 weiß ich nicht) und die aktuellen Mozillas soweit ich weiß auch.

Original geschrieben von Marnem
Tja, jetzt sind wir an nem Wunden Punkt 8)

Ich hab dieses Semester die Vrlesung "Markup-Sprachen" gehört, wo wir einige der Sprachen im XML Dunstkreis gelernt haben (XML, XHTML, XSchema/DTD, XPath, XSLT, XQuery). Und ich war grad am lernen für die Klausur, wie ich das mit dem newsfeed gelesen hab. War ne nette Ablenkung vom Lernen (Klausur trotzdem bestanden). Und weil ich ActiveX aktiviert hab, is mir das Problem erst auf intel_hasser's Kommentar hin bewußt geworden.
Gedanken über den Sinn des ganzen hatte ich mir also weiter ned gemacht. Immerhin hab ich so aber einiges über Mozilla gelernt und für die Zukunft weiß ich, daß man XSLT nur aufm Server einsetzen sollte.
 
Ach noch was:

Wenn Du wirklich XSL ausreizen willst kannste Dir ja mal Cocoon vom Apache Projekt anschaun.
Das läuft zwar auch serverseitig, ist aber wirklich sehr interessant.
 
Zurück
Oben Unten