Ik probeer een XSLT bestand te maken om WordML (MS Word XML formaat, zie http://rep.oio.dk/Microsoft.com/officeschemas/welcome.htm) om te zetten naar redelijk schone (X)HTML.
(Daarmee moet het, in combinatie met PHP, mogelijk zijn om een Word bestand inclusief de embedded afbeeldingen in html om te zetten)
Ik zit met een probleem mbt tot XSLT. Een fragment van een oude versie van mijn XSLT bestand:
Dit matcht een r element (een soort container). Het test of er zich in dit r element een i of b element bevindt (waarmee wordt aangegeven dat de inhoud van de r cursief of vet moet zijn.) Wanneer een i of b element gevonden wordt, wordt er een nette HTML tag neergezet. Dit werkt niet op het moment dat een tekst zowel vet als cursief is, alleen cursief wordt dan gematcht. Mijn aanpassing is als volgt:
Nu test'ie 2 keer voor elke stijl, 1 keer voor het plaatsen van de open tag, en 1 keer voor het plaatsen van de close tag. Principieel werkt dit, echter in de praktijk is het xslt bestand niet meer well formed en wordt hij dus ook niet geparsed. (dit omdat hij nu niet-gesloten tags bevat). Ik heb geprobeerd:
- < en > vervangen door < en >
- de tags in CDATA sections gestopt: <![CDATA[<i>]]>
Op dat moment komen de tags ook als letterlijke tekst in de html ipv als HTML codes.
Enig idee hoe ik toch die enkele tags kan gebruiken? Een andere oplossing voor mijn probleem (zijnde het kunnen nesten van <b> en <i> opmaaktags?)
(Daarmee moet het, in combinatie met PHP, mogelijk zijn om een Word bestand inclusief de embedded afbeeldingen in html om te zetten)
Ik zit met een probleem mbt tot XSLT. Een fragment van een oude versie van mijn XSLT bestand:
XSLT:
1
2
3
4
5
6
7
8
9
10
11
12
13
| <xsl:template match="w:r"> <xsl:choose> <xsl:when test=".//w:i"> <i><xsl:apply-templates /></i> </xsl:when> <xsl:when test=".//w:b"> <b><xsl:apply-templates /></b> </xsl:when> <xsl:otherwise> <xsl:apply-templates /> </xsl:otherwise> </xsl:choose> </xsl:template> |
Dit matcht een r element (een soort container). Het test of er zich in dit r element een i of b element bevindt (waarmee wordt aangegeven dat de inhoud van de r cursief of vet moet zijn.) Wanneer een i of b element gevonden wordt, wordt er een nette HTML tag neergezet. Dit werkt niet op het moment dat een tekst zowel vet als cursief is, alleen cursief wordt dan gematcht. Mijn aanpassing is als volgt:
XSLT:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <xsl:template match="w:r"> <xsl:if test=".//w:i"> <i> </xsl:if> <xsl:if test=".//w:b"> <b> </xsl:if> <xsl:apply-templates /> <xsl:if test=".//w:i"> </i> </xsl:if> <xsl:if test=".//w:b"> </b> </xsl:if> </xsl:template> |
Nu test'ie 2 keer voor elke stijl, 1 keer voor het plaatsen van de open tag, en 1 keer voor het plaatsen van de close tag. Principieel werkt dit, echter in de praktijk is het xslt bestand niet meer well formed en wordt hij dus ook niet geparsed. (dit omdat hij nu niet-gesloten tags bevat). Ik heb geprobeerd:
- < en > vervangen door < en >
- de tags in CDATA sections gestopt: <![CDATA[<i>]]>
Op dat moment komen de tags ook als letterlijke tekst in de html ipv als HTML codes.
Enig idee hoe ik toch die enkele tags kan gebruiken? Een andere oplossing voor mijn probleem (zijnde het kunnen nesten van <b> en <i> opmaaktags?)