[XSLT] Template uitvoer ge-escaped in de complete uitvoer

Pagina: 1
Acties:

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-02 07:12

Nick_S

++?????++ Out of Cheese Error

Topicstarter
Ik zit even met een probleem met XSLT waar ik even niet uitkom. Ik heb een schema document (XSD) waarin een string element zit. Dit string element wil ik nu vullen met de ge-escapede (< en ") uitvoer van een xsl-template.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<xsl:stylesheet
    <xsl:template match"/">
        <DocumentData>
            <DocumentPayload>&lt;?xml version="1.0"?&gt;
                <xsl:for-each select="//*[local-name()='DOCUMENT']">
                    <xsl:call-template name="DOCUMENT"/>
                </xsl:for-each>
            </DocumentPayload>
        </DocumentData>
    </xsl:template>

    <xsl:template name="DOCUMENT">
        <Hier>
            <Word>
                Meer XML aangemaakt.
            </Word>
        </Hier>
    </xsl:template>
</xsl:stylesheet>


Let net op het ontbreken van enkele namespaces, deze staan wel gedefinieerd in de XSLT.

Het is dus de bedoeling dat het er zo:
code:
1
2
3
4
5
6
7
8
9
        <DocumentData>
            <DocumentPayload>&lt;?xml version="1.0"?&gt;
        &lt;Hier>
            &lt;Word>
                Meer XML aangemaakt.
            &lt;/Word>
        &lt;/Hier>
            </DocumentPayload>
        </DocumentData>

uit komt te zien.

Met google kom ik wel disable-output-escaping tegen, maar dit werkt niet op templates lijkt het.

[edit]
Aargh, ik dacht, dat het eerst alleen nodig was om het leesbaar te houden. (De hele inhoud van je template al van te voren escapen is niet echt mooi, maar om het van te voren te escapen moet ik ook al mijn <xsl:attribute> dingen vervangen.

[ Voor 66% gewijzigd door Nick_S op 20-04-2006 15:03 . Reden: [s] is niet small maar doorstreept. :( ]

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Als je <Word> in je output document wil hebben, waarom zet je het dan als elementen in je XSLT? Je zou het gewoon moeten behandelen als iedere andere tekst, lijkt me.

Rustacean


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-02 07:12

Nick_S

++?????++ Out of Cheese Error

Topicstarter
Zoals ik al in die edit aangaf, gaan dingen als:
code:
1
2
3
4
5
6
7
8
9
<dai:BUY_PRICE>
    <xsl:attribute name="currency">
        <xsl:value-of select="a:BUY_PRICE/@a:currency"/>
    </xsl:attribute>
    <xsl:attribute name="unit">
         <xsl:value-of select="a:BUY_PRICE/@a:unit"/>
    </xsl:attribute>
    <xsl:value-of select="a:BUY_PRICE"/>
</dai:BUY_PRICE>

niet meer werken in de template.

De uitvoer hiervan zou dus de ene keer normale XML moeten zijn, maar in een ander element als geescapede XML moeten komen te staan.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-02 07:12

Nick_S

++?????++ Out of Cheese Error

Topicstarter
_/-\o_ Het is me gelukt! _/-\o_

Met behulp van dit xml-to-string script en een paar regels code.

code:
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
<xsl:stylesheet xmlns:xalan="http://exslt.org/common">
    <xsl:import href="xml-to-string.xsl"/>
    <xsl:template match"/">
        <DocumentData>
    <xsl:variable name="Payload">
        <xsl:for-each select="//DOCUMENT">
            <xsl:apply-templates select="."/>
        </xsl:for-each>
    </xsl:variable>
       <DocumentPayload>&lt;?xml version="1.0"?&gt;
        <xsl:apply-templates select="xalan:node-set($Payload)" mode="xml-to-string">
            <xsl:with-param name="depth" select="1"/>
        </xsl:apply-templates>
        </DocumentPayload>
        </DocumentData>
    </xsl:template>

    <xsl:template name="DOCUMENT">
        <Hier>
            <Word>
                Meer XML aangemaakt.
            </Word>
        </Hier>
    </xsl:template>
</xsl:stylesheet>

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'