Hallo zusammen,
leider habe ich mal wieder ein Xslt-Problem!
Ich verwende XSLT 2.0 mit saxon9 HE.
Ich würde gerne die nachfolgende Quell-XML umformen:
Gewünschte Ziel-XML:
Die Quell-XML ist so zu verstehen:
Es sind einzelne Paragraphen dargestellt, welche verschiede Strings enthalten.
Diese Strings können unformatiert oder formatiert sein. Wenn ein String oder mehrere Strings formatiert sind, dann ist ein <Font> Element mit einem <FontStyle> (z.B. kursiv) das davor liegende Element. Die Formatierung endet sobald ein Element <Font> mit leerem <FontStyle> auftritt.
In der Ziel-XML hätte ich gerne die formatierten Strings in einen <Text> mit entsprechendem Format als Attribut gepackt.
Ich habe nun folgenden Ansatz gewählt:
Leider bekomme ich nicht die gewünschte Ausgabe. Da verschiedene Fehler auftreten, wie z.B. dass das schließende <Text>-Tag fehlt.
Hat jemand ne Idee was ich falsch mache. Bzw. wie ein richtiger Ansatz aussähe?
Gruß
Benni
leider habe ich mal wieder ein Xslt-Problem!
Ich verwende XSLT 2.0 mit saxon9 HE.
Ich würde gerne die nachfolgende Quell-XML umformen:
Code:
<Root> <Paragraph> <String>Unformatierter Text 1</String> <String>Unformatierter Text 2</String> <Font> <FontStyle>kursiv</FontStyle> </Font> <String>Kursiver Text 1</String> <String>Kursiver Text 2</String> <Font> <FontStyle></FontStyle> </Font> <String>Unformatierter Text</String> <Font> <FontStyle>fett</FontStyle> </Font> <String>fetter Text</String> <Font> <FontStyle></FontStyle> </Font> </Paragraph> <Paragraph> <String>Unformatierter Text</String> </Paragraph> </Root>
Code:
<Root> <Paragraph> <String>Unformatierter Text 1</String> <String>Unformatierter Text 2</String> <Text fontFormat="kursiv"> <String>Kursiver Text 1</String> <String>Kursiver Text 2</String> </Text> <String>Unformatierter Text</String> <Text fontFormat="fett"> <String>fetter Text</String> </Text> </Paragraph> <Paragraph> <String>Unformatierter Text</String> </Paragraph> </Root>
Es sind einzelne Paragraphen dargestellt, welche verschiede Strings enthalten.
Diese Strings können unformatiert oder formatiert sein. Wenn ein String oder mehrere Strings formatiert sind, dann ist ein <Font> Element mit einem <FontStyle> (z.B. kursiv) das davor liegende Element. Die Formatierung endet sobald ein Element <Font> mit leerem <FontStyle> auftritt.
In der Ziel-XML hätte ich gerne die formatierten Strings in einen <Text> mit entsprechendem Format als Attribut gepackt.
Ich habe nun folgenden Ansatz gewählt:
Code:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0"> <xsl:template match="Root"> <xsl:for-each select="Paragraph"> <xsl:choose> <xsl:when test="Font/FontStyle!=''"> <Text fontFormat="{FontStyle}"> </xsl:when> <xsl:when test="Font/FontStyle=''"> </Text> </xsl:when> <xsl:otherwise> <xsl:copy-of select="String"/> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> </xsl:stylesheet>
Hat jemand ne Idee was ich falsch mache. Bzw. wie ein richtiger Ansatz aussähe?
Gruß
Benni
Comment