Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[xslt] xslt code en html-tags in cdata

Pagina: 1
Acties:

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Ik ben een xml document in een ander xml document aan het omzetten met xslt en loop daarbij tegen het volgende probleem aan
In de output moeten <body> tags komen met daarin html-tags. Deze html tags moeten weer omsloten zijn door <![CDATA[ ]]>. Voorbeeld:
code:
1
<body><![CDATA[ <p>this is a paragraph</p>]]></body>


Het punt is echter dat er ook nog xslt-code tussen moet komen te staan. Dit is dus niet mogelijk:

XSLT:
1
<body><![CDATA[ <p><xsl:value-of select="'this is a paragraph'"/></p>]]></body>

(het is een beetje onzinnig om dit te doen, maar het gaat om het idee. Probleem is dus dat <xsl:value etc.. dan ook wordt geoutput ipv uitgevoerd.

Oplossing is dan om dit te doen:

<xsl:output cdata-section-elements="body" />

Probleem daarvan is weer dat ik het niet voor elkaar krijg om tags er tussen te zetten.
Dit werkt opzich:

XSLT:
1
<body>&lt;p&gt;<xsl:value-of select="'this is a paragraph'"/>&lt;/p&gt;</body>


Maar daar red ik het ook niet mee, omdat ik dan (o.a.) dit niet meer kan doen:
XSLT:
1
2
3
4
5
6
7
8
<body>
    &lt;p&gt;
    <xsl:attribute name="style">
        <xsl:value-of select="'color:red;'"/>
    </xsl:attribute>
    <xsl:value-of select="'this is a paragraph'"/>
    &lt;/p&gt;
</body>


Heb ook geprobeerd om alles te bufferen in een variabele, maar dan gaan de tags (gek genoeg) verloren en krijg ik alleen de tekst terug.

Afijn ... ik heb dus al een hoop geprobeerd, maar krijg het niet voor elkaar.
Waar het dus nogmaals om gaat:

Hoe krijg ik met xslt in m'n output <![CDATA[ ]]?> op zo'n manier dat ik er tussen nog html tags kan zetten (met < en > en dus niet met <) en er nog xslt-code tussen kan zetten.

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 00:58

RM-rf

1 2 3 4 5 7 6 8 9

misschien werkt het wel via

code:
1
2
3
4
5
6
7
8
9
<xsl:variable
name="OpenCDATASection"><![CDATA[<![]]><![CDATA[CDATA[]]></xsl:variable>
<xsl:variable
name="CloseCDATASection"><![CDATA[]]]]><![CDATA[>]]></xsl:variable>
    
<xsl:value-of select="$OpenCDATASection" disable-output-escaping="yes"/>
<xsl:value-of select="node" disable-output-escaping="yes"/>
<xsl:value-of select="$CloseCDATASection"
disable-output-escaping="yes"/>


een andere optie zou zijn via xsl:text elementen (ook daar weer het opbreken van de '<![CDATA' in twee verschillende gescheiden delen)

[ Voor 13% gewijzigd door RM-rf op 24-09-2007 17:01 ]

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Held!
Dat werkt inderdaad gesmeerd :)