XML. XSL, Probleme mit <br> und <li>

Cine

Mitglied
Hi,

folgendes Problem ich hab ein xml in dem ich gerne Zeilenumbrüche haben möchte.
Die xml lese ich mit einer xsl aus.
Nun haben leider die <br> und <li> Punkte, warum auch immer, keine Auswirkung.
Habe das schon mit den folgenden Mitteln versucht:

1.) Einfach in der xml an den entsprechenden Stellen <br /> geschrieben.

und

2.) <inhalt xmlns:http://www.w3.org/Profiles/XHTML-transitional">
<html:br />
</inhalt>

Die beiden Möglichkeiten schlugen fehl.

Jetzt wollt ich halt ein for-each in der xsl basteln, aber hab keinen blassen schimmer wie.

Dacht da an so ein Konstrukt wie:
<xsl:for-each select="keine Ahnun was">
<xsl:value-of select="keine Ahnung was" /> <br />


Weiß aber nicht was ich anstatt "keine Ahnung was" schreiben soll.
Kann mir da wer helfen bzw. bei dem ganzen Problem mit den <br> und <li> helfen?


So long
Cine
 
Hi.

<br> Tags haben nur in (X)HTML eine Bedeutung. Soll das heißen, das du deine XML Datei in eine (X)HTML Datei transformierst?

Um die <br> Tags auch in der Ausgabe zu haben mußt du doch nur diese Tags auch in die Ausgabe kopieren:
XML:
<xsl:template match="br"><br/></xsl:template>

Gruß
 
Zuletzt bearbeitet von einem Moderator:
Hi thx für deine Hilfe.

Wollte eigentlöich kein XHTML bauen, aber da ich blutiger Anfänger bin in dem Gebit XML und co hab ich einfach mal alles ausprobiert das so ähnlich aussieht wie das was ich wollt:) .

Werd es gleich mal mit deinem Ratschlag probieren.
 
öh, wie kann man denn mehrere templates einbinden? Der sagt mir nun dauernd template darf nicht an dieser position stehen...Entweder ich stell mich grad so blöd an oder es ist so blöd:)
 
Ok hab es, hab mich so blöd angestellt. So hab es jetzt aber funktioniert immer noch nicht.
Hier jetzt mal die Codes vielleicht hilft das weiter:
xml
Code:
<?xmlversion="1.0"encoding="ISO-8859-1"standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="b.xsl"?>
<buchstabe>
<headline>Buchstabe B</headline>
<b>
<begriff>Backbone</begriff>
<definition>Zu deutsch: Rückgrat.Im Allgemeinen ein zentraler Bereich eines Netzwerkes mit
hohen Bandbreiten.Im LAN spricht man von Gebäude-Backbone oder Core-Switch und
meint damit den Teil einer strukturierten Verkabelung, der Etagen verbindet oder auch
nur Backbone, der mehrere Gebäude verbindet.Im WAN weißt der Begriff auf das
Kernnetz in einer hierarchischen Netzstruktur hin, das meist gegen Ausfälle durch
Doppelung seiner Komponenten geschützt ist.</definition>
</b>
<b>
<begriff>Backbone - Collapsed</begriff>
<definition>Ein virtueller Backbone der auf einem Router oder Switch gebildet wird. Durch wenige
aktive Netzwerkkomponenten ist ein zentrales Management des Backbones möglich, was zu
einer einfachen Wartung un damit einem zuverlässigeren, sicheren Netz führt.
Ausserdem verbessert er die Gesamtleistung eines Netzes und erleichter den Übergang
zwischen Netzformen von LANs und WANs.Nachteil: Bei einem Geräteausfall bricht
die Kommunikation sämtlicher teritärbereiche zusammen.</definition>
</b>
<b>
<begriff>Backbone - Distributed</begriff>
<definition>Ein eher veraltete Variante, bei der die einzelnen Etagenverteiler über einen Ring
verbunden sind. Der Ring muss innerhalb der strukturierten Verkabelung auch durch den
Gebäudeverteiler laufen. Da er ein eigenes Subnetz bildet, müssen innerhalb der
Etagenverkabelung Geräte auf Schicht drei des OSI-Modells eingesetzt werden, um
eigene Subnetze zu generieren. Dadurch wird das Management und die Bildung von
gebäudeübergreifenden VLANs erschwert.</definition>
</b> 
<b>
<begriff>Backplanedurchsatz</begriff>
<definition>Beschreibt die Kapazität auf den Bussen innerhalb eines Switches, für den Transport
zwischen den Ports.</definition>
</b>
<b>
<begriff>Bastion Host</begriff>
<definition>Ist ein Server, Der Dienste für Internet anbietet oder als Proxy, Mailserver auf das
öffentliche Internet zugreifen muss und daher besonders behandelt werden muss.</definition>
</b>
<b>
<begriff>Bridge</begriff>
<definition><li>Verbindet Teilnetze miteinander</li><li>Arbeitet auf der Schicht 1 und 2 des ISO/OSI
Schichten Modells</li><li>überträgt Datenpackete zwischen den Teilnetzen anhand
der identifizierenden MAC-Adresse</li><li>Dient zur Lastenkopplung im eigenen Netz</li>
<li>Führt keine Bearbeitung der Daten durch.</li></definition>
</b>
<b>
<begriff>Broadcast</begriff>
<definition>Ist eine 1 : alle Verbindung.<br/>Daten werden von einem Sender zu allen in einem
Netzwerksegemnt geschickt.</definition>
</b>
</buchstabe>

und die xsl
Code:
<?xmlversion="1.0"encoding="ISO-8859-1"?>
<xsl:stylesheetversion="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:templatematch="/">
<html>
<head>
<title><xsl:value-ofselect="buchstabe/headline"/></title>
<bodytext="#000000"bgcolor="#ECFDFF"link="#0000FF"alink="#0000FF"vlink="#0000FF"topmargin="0"leftmargin="0">
<center><h1>Buchstabe B</h1></center><br><br></br></br>
<tablewidth="100%"border="1"bordercolordark="000000"bordercolorlight="000000"bgcolor="#FF9FA2">
<tr>
<tdwidth="50%"><center><b>Begriff</b></center></td>
<tdwidth="50%"><center><b>Definition</b></center></td>
</tr>
<xsl:for-eachselect="buchstabe/b">
<tr>
<tdwidth="50%"bgcolor="#EEEEEE"><xsl:value-ofselect="begriff"/></td>
<tdwidth="50%"bgcolor="#EEEEEE"><xsl:value-ofselect="definition"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</head>
</html>
</xsl:template>
<xsl:templatematch="br">
<br/>
</xsl:template>
</xsl:stylesheet>

Vielleicht findest du den fehler.
 
Cine hat gesagt.:
Hier jetzt mal die Codes vielleicht hilft das weiter:

Also erstmal hoffe ich, das du das nicht wirklich so eingegeben hast. Wieso sind denn da keine Leerzeichen drin?

Dann generierst du kein standardkonformes HTML. Das <head> Element enthält bei dir den <body> des Dokuments. Du mußt das <head> Element bereits vor dem <body> zu machen.

Außerdem ist es eine gute Idee die Ausgabemethode auf HTML zu setzen:
XML:
<xsl:output method="html" version="4.0" />

Um die Tags aus den <begriff> und <definition> Elementen in die Ausgabe zu übernehmen mußt du natürlich dafür sorgen, das die Templates für die Elemente die dort enthalten sind angewendet werden:
XML:
<td width="50%"><xsl:apply-templates select="begriff"/></td>

Wobei text Knoten immer implizit in die Ausgabe kopiert werden. Dafür brauchst du also keine Regel angeben.

Gruß

/edit: Wenn du allerdings immer alle Tags innerhalb bestimmter Elemente in die Ausgabe übernehmen willst, dann kannst du auch gleich copy-of verwenden:
XML:
<td width="50%"><xsl:copy-of select="begriff"/></td>
Dann brauchst du keine extra Regeln für <br> und <li> angeben.
 
Zuletzt bearbeitet von einem Moderator:
aha, aha

so langsam kommt Licht ins Dunkle.

Also zum Thema Leerzeichen, die hab ich schon drinnen, weiß nicht warum sie hier nicht mehr drinnen sind.

Das mit dem schließenden head tag, dass der fehlt, hätte ich auch selber sehen können. War aber wohl so genervt, dass ich sowas nicht mehr gesehen hab.:rolleyes:

Thx für die Hilfe, werde mich gleich mal drann setzen und probieren.

Werd mich wieder melden und das Ergebnis kundgeben
 
Ich bin begeistert!!
Endlich funktioniert alles so wie ich mir vorgestellt habe.

Hab das jetzt mit dem copy of gemacht.

Thx noch mal für deine Hilfe.
 
Zurück