Ik heb hier een vreselijk mooi XML-bestandje dat een representatie is van
een RichText-veld. Dit wil ik transformeren naar HTML.
Affijn, ik heb even een voorbeeld gemaakt.
In het RichText-veld staat een lijstje, een regel tekst en nog een lijstje (zie screenshot hieronder).

De relevante XML-uitvoer ziet er dan zo uit (het is misschien wat lang, maar wel belangrijk bij het weergeven van het probleem):
Even wat uitleg erbij. Als eerste wordt een pardef gedefinieerd als een lijst (dmv list='bullets'), met het id 2. Hierna volgen er een aantal par elementen. Iedere sibling van een pardef hoort bij diezelfde pardef (het lijstje), totdat er een nieuwe pardef gedefinieerd wordt. Het lijstje wordt onderbroken door een nieuwe pardef, die de regel tekst + wat enters voorstelt.
Op regel 43 begint het 2e lijstje. Dit is te zien doordat er verwezen wordt naar de pardef met het id 2.
Zoals te zien is, is er tussen het 1e list-item en de pardef een relatie middels het def-attribute.
Echter, tussen de overige list-items en de bijbehorende pardef is er geen enkele relatie, behalve dat het een sibling is.
Tot zover de uitleg van de brakke XML
Het lukt me nog wel om het eerste lijstje in HTML te krijgen, door middel van de volgende XSLT:
Misschien is mijn gedachtengang verkeerd (en de XSLT is misschien wat omslachtig), maar met deze opzet zie ik geen manier om het 2e lijstje om te zetten naar HTML.
Dat is dus mijn vraag: hoe kan ik met XSLT de XML van het 2e lijstje omzetten naar een HTML-lijst?
Even een toevoeging, ik heb geen invloed op de XML, die komt van Notes
een RichText-veld. Dit wil ik transformeren naar HTML.
Affijn, ik heb even een voorbeeld gemaakt.
In het RichText-veld staat een lijstje, een regel tekst en nog een lijstje (zie screenshot hieronder).

De relevante XML-uitvoer ziet er dan zo uit (het is misschien wat lang, maar wel belangrijk bij het weergeven van het probleem):
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
| <richtext> <pardef id='2' leftmargin='1.2500in' list='bullet'/> <par def='2'> <run> <font style='bold' color='red'/> List-item 1 </run> </par> <par> <run> <font style='bold' color='red'/> List-item 2 </run> </par> <par> <run> <font style='bold' color='red'/> List-item 3 </run> </par> <pardef id='3' leftmargin='1in'/> <par def='3'> <run> <font style='bold' color='red'/> </run> </par> <par> <run> <font style='bold' color='red'/> </run> </par> <par> <run> <font style='bold' color='red'/> melp </run> </par> <par> <run> <font style='bold' color='red'/> </run> </par> <par def='2'> <run> <font style='bold' color='red'/> List-item 1 </run> </par> <par> <run> <font style='bold' color='red'/> List-item 2 </run> </par> </richtext> |
Even wat uitleg erbij. Als eerste wordt een pardef gedefinieerd als een lijst (dmv list='bullets'), met het id 2. Hierna volgen er een aantal par elementen. Iedere sibling van een pardef hoort bij diezelfde pardef (het lijstje), totdat er een nieuwe pardef gedefinieerd wordt. Het lijstje wordt onderbroken door een nieuwe pardef, die de regel tekst + wat enters voorstelt.
Op regel 43 begint het 2e lijstje. Dit is te zien doordat er verwezen wordt naar de pardef met het id 2.
Zoals te zien is, is er tussen het 1e list-item en de pardef een relatie middels het def-attribute.
Echter, tussen de overige list-items en de bijbehorende pardef is er geen enkele relatie, behalve dat het een sibling is.
Tot zover de uitleg van de brakke XML
Het lukt me nog wel om het eerste lijstje in HTML te krijgen, door middel van de volgende XSLT:
XSLT:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <xsl:template match="richtext"> <xsl:for-each select="*"> <xsl:choose> <xsl:when test="name()='pardef' and @list='bullet'"> <xsl:variable name="id" select="@id" /> <ul> <xsl:for-each select="following-sibling:: par[preceding-sibling::pardef[position()=1 and @id=$id]]"> <li><xsl:value-of select="run" /></li> </xsl:for-each> </ul> </xsl:when> </xsl:choose> </xsl:for-each> </xsl:template> |
Misschien is mijn gedachtengang verkeerd (en de XSLT is misschien wat omslachtig), maar met deze opzet zie ik geen manier om het 2e lijstje om te zetten naar HTML.
Dat is dus mijn vraag: hoe kan ik met XSLT de XML van het 2e lijstje omzetten naar een HTML-lijst?
Even een toevoeging, ik heb geen invloed op de XML, die komt van Notes
[ Voor 53% gewijzigd door Rickets op 14-01-2004 21:15 ]
If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.