ich möchte gerne im Text-Content jeweils beim Zeilenumbruch ein Element
im Ausgang einfügen, d.h.
---------8<----------
<verbatim>
for i=1,100 do:
print i
</verbatim>
---------8<----------
soll etwas werden wie:
---------8<----------
<w:r><w:br/>
for i=1, 100 do:<w:br/>
print i<w:br>
</w:r>
---------8<----------
Geht das mit xslt (speziell xsltproc) und wenn ja: wie?
Viele Grüße
Ole
Mit XSLT 2.0 (möglich mit Saxon 9 (http://saxon.sourceforge.net),
AltovaXML Tools (http://www.altova.com/), Gestalt
(http://gestalt.sourceforge.net):
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:w="http://example.com/2009/w"
exclude-result-prefixes="xsd"
version="2.0">
<xsl:template match="verbatim">
<w:r>
<xsl:analyze-string select="." regex="\n">
<xsl:matching-substring>
<w:br/>
<xsl:value-of select="."/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</w:r>
</xsl:template>
</xsl:stylesheet>
Mit XSLT 1.0 wirst du ein rekursives Template schreiben müssen, dass mit
contains, substring-before, substring-after jeden Zeilenumbruch findet
und dann die Ausgabe erzeugt und den Rest weiterverabeitet.
--
Martin Honnen
http://msmvps.com/blogs/martin_honnen/
Martin Honnen <maho...@yahoo.de> writes:
> Ole Streicher wrote:
>> ich möchte gerne im Text-Content jeweils beim Zeilenumbruch ein Element
>> im Ausgang einfügen
> Mit XSLT 1.0 wirst du ein rekursives Template schreiben müssen,
Ginge nicht auch EXSLT? Ich habe mir mal str:split angeschaut, das
müsste eigentlich das Erwartete können. Leider bekomme ich das nicht
hin. So sieht mein Komplettbeispiel aus:
---------------------------8<--------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="str"
version="1.0">
<xsl:output method="xml"/>
<xsl:template match="/">
<verbatim>
<xsl:for-each select="str:split(., '\n')">
<xsl:value-of select="."/><line-break/>
</xsl:for-each>
</verbatim>
</xsl:template>
</xsl:stylesheet>
---------------------------8<--------------------------------------
Das macht aus
---------------------------8<--------------------------------------
<?xml version="1.0"?>
<a>
for i in 1, 100:
print i
</a>
---------------------------8<--------------------------------------
aber ein
---------------------------8<--------------------------------------
<?xml version="1.0"?>
<verbatim>
for i in 1, 100:
print i
<line-break/></verbatim>
---------------------------8<--------------------------------------
d.h. es hängt den Linebreak nur ans Ende, nicht nach jedem
Zeilenumbruch. Warum ist das so?
Viele Grüße
Ole
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:str="http://exslt.org/strings"
> extension-element-prefixes="str"
> version="1.0">
>
> <xsl:output method="xml"/>
> <xsl:template match="/">
> <verbatim>
> <xsl:for-each select="str:split(., '\n')">
Laut Doku http://www.exslt.org/str/functions/split/index.html müsste das
zweite Argument wohl
str:split(., ' ')
sein.