Zeilenumbruch in XML erkennen und durch <br /> ersetzen
Mathias
- xsl
0 Kerstin0 Mathias
1 Thomas J.S.0 Tim Tepaße0 Mathias
Hallo,
ich habe folgendes Problem:
Ich erhalte als Vorgabe eine XML-Datei, die ein tag <content> enthält. Der Inhalt ist dort einfach "reingeschüttet" worden, d.h. es existiert kein tag, das Zeilenumbrüche angibt, so dass man mit einem template diese sauber ersetzen könnte. Das Ganze schaut ungefähr so aus:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="test.xsl" ?>
<root>
<content>
Hallo <strong>Welt</strong>,
das ist ein kleiner text vom <strong>Autor</strong>.
Hier geht es dann weiter ...
</content>
</root>
Den fett markierten Bereich kann ich durch die entsprechenden HTML-Tags ersetzen, jedoch habe ich keine Funktion oder Workaround gefunden, die mir in XSL die ungekennzeichneten Zeilenumbrüche durch '<br />'s ersetzt.
Habt Ihr vielleicht eine Idee?
mathias
Hallo,
nicht direkt XSL jetzt sondern mehr sowas da:
http://de.selfhtml.org/css/eigenschaften/ausrichtung.htm#white_space
<html><head><title>white-space</title>
<style type="text/css">
#editor { white-space:pre; }
#langezeile { white-space:nowrap; }
</style>
</head><body>
<p id="editor">
Der Absatz, den Sie gerade lesen,
wurde als predefiniert definiert.
Zeilenumbrüche sollten dabei so interpretiert
werden, wie sie im Editor eingegeben wurden.</p>
<p id="langezeile">Der Absatz, den Sie gerade lesen, darf nicht
umbrochen werden. Es sollte kein automatischer Zeilenumbruch erfolgen. Bei
diesem längeren Text müssen Sie vermutlich quer scrollen, um alles zu lesen.</p>
</body></html>
weiß nicht, ob das in deinem Fall funktioniert. Mal ausprobieren!
Gruß,
Kerstin
Hallo Kerstin,
leider klappt das nicht, da die einzelnen Zeilen erheblich länger sind. Es müsste schon mit XSL sein.
mathias
Hallo,
ich habe folgendes Problem:
Ich erhalte als Vorgabe eine XML-Datei, die ein tag <content> enthält. Der Inhalt ist dort einfach "reingeschüttet" worden, d.h. es existiert kein tag, das Zeilenumbrüche angibt, so dass man mit einem template diese sauber ersetzen könnte.
Habt Ihr vielleicht eine Idee?
Hier im Archiv suchen ;-)
<xsl:template match="content">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="content/text()">
<xsl:call-template name="cr2br">
<xsl:with-param name="text" select="." />
</xsl:call-template>
</xsl:template>
<xsl:template name="cr2br">
<xsl:param name="text" />
<xsl:variable name="textafterbreak" select="substring-after($text, '
')" />
xsl:choose
<xsl:when test="contains($text, '
')">
<xsl:value-of select="substring-before($text, '
')" />
<br />
<xsl:call-template name="cr2br">
<xsl:with-param name="text" select="$textafterbreak" />
</xsl:call-template>
</xsl:when>
xsl:otherwise
<xsl:value-of select="$text" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Grüße
Thomas
Hallo,
Habt Ihr vielleicht eine Idee?
Hier im Archiv suchen ;-)
Vorrausgesetzt es wird ein XSLT 2 fähiger Prozessor benutzt, wäre es vielleicht auch sinnig xsl:analyse-string zu benutzen, tatsächlich gibt es in der XSLT 2 Spezifikation ein Beispiel genau für diesen Anwendungsfall:
http://www.w3.org/TR/xslt20/#regex-examples
Tim
Hallo Thomas,
vielen Dank für den Tipp funktioniert super.
mathias