In XML eingebettetes HTML ausgeben
Steffen
- xsl
Hallo allerseits!
Ich hab ein kleines Problem, dass ich trotz laengere Suche in
diversen Online-FAQ etc. nicht loesen konnte. Mehrere Tips
beziehen sich zwar auf dieses Problem, nur funktionieren die
vorgestellten Loesungen nicht. Vielleicht kennt jemand von Euch eine Lösung:
Ich lese aus einer Datenbank strukturierte Texte aus und erzeuge
XML-Dateien (entsprechende DTD hab ich auch...egal). Leider sind
Teile dieser DB mit HTML-Tags ausgezeichnet (Altlast, zuviel um das
zu aendern!). Diese bette ich in XML ein nach der Form
<HtmlEinschub>
<table> ...
... (HTML eben)
</HtmlEinschub>
Die HTML-Tags werden von einem Script geparst und XML-konform gemacht (also fehlende Endtags eingefuegt, Gross/Kleinschreibung..
sprich die XML Datei ist wohlgeformt).
XSL soll jetzt dafuer sorgen, dass ausser dem weitaus groesserem,
XML-basierten Texten auch die Teile mit HTML-Auszeichnung ausgegeben
werden (und die HTML-Tags natuerlich als solche interpretiert werden).
Hat jemand vielleicht eine Ahnung, wie das funktioniert? (vielleicht eine 3-Zeilen XML Datei mit Stylesheet)
Im vorraus Danke.
Steffen
Hallo Steffen,
XSL soll jetzt dafuer sorgen, dass ausser dem weitaus groesserem,
XML-basierten Texten auch die Teile mit HTML-Auszeichnung ausgegeben
werden (und die HTML-Tags natuerlich als solche interpretiert werden).
Ich nehme einfach mal an, du möchtes alles, was innerhalb eines XML-Tags mit dem Namen <HtmlEinschub> steht direkt in den Ergebnisbaum (das Ergebnisdokument) schreiben, welcher ein HTML-Dokument darstellt. Dazu benötigst du zwei Dinge zu dem sonstigen Template-Kram:
Also z.B.:
<?xml version="1.0" encoding="iso-8859-1"?>
<ausgabe>
<keinHtml>Es folgt HTML aus dem Quelldokument:</keinHtml>
<HtmlAuszug>
<p>Ein schöner HTML-Paragraph
<br/> Ja auch mit Zeilenumbrüchen und schön XML-konform.
Und noch ne Tabelle
<table border="1">
<tr>
<td>Zelle 1</td>
<td>Zelle 2</td>
</tr>
</table>
</p>
</HtmlAuszug>
</ausgabe>
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/REC-html40">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head>
<title>Ausgabe von HTML mit xsl:copy</title>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="keinHtml">
xsl:apply-templates/
</xsl:template>
<xsl:template match="HtmlAuszug">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
<xsl:ouput method="html"/> sorgt dafür, dass das XHTML als HTML ausgegeben wird. Also <br/> zu <br> wird usw.
Für die HtmlAuszug-Elemente gibt es eine eigene Template-Rule, welche dir einfach nur den Inhalt des Elements in das Ergebnis-Dokument kopiert.
Hoffe das hilft dir weiter.
Gruß
Franz
Hallo Franz,
erstmal danke fuer den Tip. Prinzipiell muesste es so funktionieren.
Nur tut der IE 5.0/5.5 das nicht. Er zeigt ueberhaupt nichts an.
Bis jetzt hab ich dem IE nur etwas entlocken koennen, wenn ich den
alten <xsl:stylesheet xmlns:xsl='http://www.w3.org/TR/WD-xsl'> Namespace
verwende, nicht aber den neuen w3 konformen XSLT.
Hat jemand vielleicht eine Idee?
Danke
Steffen
Hallo,
erstmal danke fuer den Tip. Prinzipiell muesste es so funktionieren.
nicht nur prinzipiell ;-)
Nur tut der IE 5.0/5.5 das nicht. Er zeigt ueberhaupt nichts an.
Bis jetzt hab ich dem IE nur etwas entlocken koennen, wenn ich den
alten <xsl:stylesheet xmlns:xsl='http://www.w3.org/TR/WD-xsl'> Namespace
verwende, nicht aber den neuen w3 konformen XSLT.
Hat jemand vielleicht eine Idee?
Du hast sozusagen _die_ FAQ im Zusammenhang mit IE und XSLT erwischt ;-)
Lösung: updaten auf den aktuellen msxml-Parser im IE, der ausgeliefert wird ist noch der Parser drin.
Aktuelle Version hier:
http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/591/msdncompositedoc.xml
Dabei gibt es einiges zu beachten, hervorragend zu dem Thema:
http://www.netcrucible.com/xslt/msxml-faq.htm
Gruß
Franz
Grüssi!
Also, ich finde dieser Link hat den (hier und jetzt ins Leben gerufenen) Preis für die verrückteste Url redlich verdient *fg* Da bekommt man ja fast nen Parametrischen-Directory-Drehwurm wenn man den liest ;-)
lg bernhard
Hallo Bernhard,
Also, ich finde dieser Link hat den (hier und jetzt ins Leben gerufenen) Preis für die verrückteste Url redlich verdient *fg* Da bekommt man ja fast nen Parametrischen-Directory-Drehwurm wenn man den liest ;-)
gut, ne *sg* (stolz grins).
Preisgeld bitte auf Kto:56432 BLZ: 6765868 Stichwort: URLs im neuen Jahrtausend.
Ich erinnere mich noch an einen lustigen Thread zu dem Thema, den ich nicht so ganz nachvollziehen konnte (mal war der Link korrekt mal nicht, war mir irgendwie zu hoch ;-) )
Aber dafür habe ich nun das M$-System begriffen: Man muss(te) nämlich getUrl anklicken, damit dann die entsprechende Seite auch wirklich verlinkbar war, ansonsten ist man immer irgendwo gelandet, aber nie auf der Seite, die man eigentlich verlinken wollte (wegen Frames usw.).
Gruß
Franz
PS: haste wenigstens gevotet ;-)
Grüssi Franz!
Preisgeld bitte auf Kto:56432 BLZ: 6765868 Stichwort: URLs im neuen Jahrtausend.
Ich hab einen Konkurrenten gefunden: Zwar nicht ganz so rekursiv, dafür aber schön brav verschachtelt:
Besonders das '//' im hinteren Drittel macht mich etwas stutzig ;-)
Ich erinnere mich noch an einen lustigen Thread zu dem Thema, den ich nicht so ganz nachvollziehen konnte (mal war der Link korrekt mal nicht, war mir irgendwie zu hoch ;-) )
hmmmm ... ähm .... welchen meinst du? Hab ich den etwa verschlafen?
PS: haste wenigstens gevotet ;-)
Freili!
lg bernhard
Besonders das '//' im hinteren Drittel macht mich etwas stutzig ;-)
http://www.teamone.de//////////////////selfaktuell//////////////////
Lösung: updaten auf den aktuellen msxml-Parser im IE, der ausgeliefert wird ist noch der Parser drin.
Hm, also nicht nur die kränkeste URL, sondern auch die kränkeste Lösung!
Gemeint ist natürlich, dass der IE 5.0/5.5 noch eine alte Version des msxml-Parsers mit ausliefert, die noch einen Entwurfs-Namensraum von XSLT nutzt und ansonsten auch keine volle (wenn überhaupt halbe) Implementierung des aktuellen XSLT 1.0-Standards enthält, dafür aber beruhigenderweise einige MS-Erweiterungen.
So,
Gute Nacht allerseits
Franz
Endlich, es funktioniert.
Dank Dir Franz!