Toon posts:

[XML/XSL] HTML opmaak behouden

Pagina: 1
Acties:
  • 153 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig met een log van een reactie-formulier in XML. Deze wordt mbv van XSL weergegeven.
Alles werkt tot dusver uitstekend. Nu loop ik alleen tegen het probleem aan dat <br/> 's in het gepostte bericht door mijn XSL-sheet niet worden weergegeven als newlines, maar er gewoon </br> op mijn scherm gedisplayed wordt.
Iemand een oplossing?

Verwijderd

Ik denk, maar weet het niet zeker, dat je een juiste DTD moet definieren.

  • OMX2000
  • Registratie: Januari 2001
  • Laatst online: 03:20

OMX2000

By any means necessary...

hmmmm... zou vanalles kunnen zijn (lekker vaag ;) ) maar ff serieus... volgens mij gaat er iets mis met het kopieren van een node, naar de output...
maar er valt weinig over te zeggen, zonder het zien van de xsl

en bedoel je ook echt <br/> in de input en </br> in de output?

Dè developers podcast in je moerstaal : CodeKlets Podcast


  • Yoda
  • Registratie: December 1999
  • Laatst online: 07-11-2025

Yoda

Can you feel it?

en als je nou

<
en
>

gebruikt ipv < en >

Verwijderd

Topicstarter
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
26
27
28
29
30
31
32
33
34
35
36
<?xml version='1.0' encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:template match="/">

<xsl:for-each select="berichten/bericht" order-by="-bericht[@datum]">
     <b>Datum:</b> <xsl:value-of select="datum"/><br/>
     <b>Naam:</b> <xsl:value-of select="naam"/><br/>
     <b>Bedrijf:</b> <xsl:value-of select="bedrijf"/><br/>
     <b>Adres:</b> <xsl:value-of select="adres"/><br/>
       <b>Postcode / woonplaats: </b> <xsl:value-of select="postcode"/> <xsl:value-of select="woonplaats"/><br/>
       <b>Telefoon:</b> <xsl:value-of select="telefoon"/><br/>
       <b>E-mail:</b>
           <a>
               <xsl:attribute name="href">
                mailto:<xsl:value-of select="email"/>
            </xsl:attribute>
            <xsl:value-of select="email"/>
        </a><br/>
       <b>Website:</b>
           <a>
               <xsl:attribute name="href">
                <xsl:value-of select="website"/>
            </xsl:attribute>
            <xsl:attribute name="target">
                blank
            </xsl:attribute>
            <xsl:value-of select="website"/>
        </a><br/>
       <b>Vraag:</b> <xsl:value-of select="vraag"/><br/>
       <b>Interesse:</b> <xsl:value-of select="onderwerp"/><br/>
       <b>Contact: </b> <xsl:value-of select="contact"/><br/>
       <b>Bezoek: </b> <xsl:value-of select="bezoek"/><br/><br/><br/>
</xsl:for-each>

</xsl:template>
</xsl:stylesheet>

Dit is de XSL-sheet. Wanneer ik in mijn ASP-code een newline niet replace wordt er niets weergegeven, wanneer ik hem replace naar <br/> wordt er gewoon <br/> weergegeven en wanneer ik replace naar
code:
1
&lt;br/&gt;

wordt ook dit gewoon weergegeven ipv een line-break.

Verwijderd

Je hebt geen <html> en <body> om je html neergezet. Dan wordt het meestal als platte tekst weergegeven :D

Je vertelt niet welke browser je gebruikt, maar ik vermoed netscape. Netscape kan geen <br/> aan, daar moet je een spatie toevoegen aan de tag: &ltbr /&gt.

Verder heb je een order-by attribute in de for-each tag gezet, maar die doet niets, je moet een aparte xsl:sort tag opnemen IN de for-each tag.

'blank' zal je geen nieuw window opleveren bij een target voor de 'a' tag, _blank echter wel.

[note aan de bouwer van topix: als je text omzet in een field, zet dan niet html tags om alsje niet snapt wat er staat. Bedankt]

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Enkele aanmerking op je stylesheet:

1. Definieer een output element met een method attribuut: html.

2. Gebruik meerdere templates! Elke "normale" programmeur schrijft een root template en gaat daar werkelijk alles in zitten rommelen. Dit is uitermate onduidelijk...

3. Ik zie helemaal geen html, head en body tags?

4.Je gebruikt niet de goede XSL namespace

5. Als je je input de (X)HTML namespace geeft kan je een identiteits template maken voor behaalde (X)HTML tags.

Hier kan je een voorbeeldje vinden met output method en de goede namespace:
[topic=289102/1/25]

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Iets concretere tips:
code:
1
<xsl:for-each select="berichten/bericht" order-by="-bericht[@datum]">

Waarom hier for-each gebruiken? Het is veel makkelijker om hier apply-templates aan te roepen (inderdaad met een sort element, zie Otis) en het bericht in een andere template af te handelen.
code:
1
2
3
4
     <b>Datum:</b> <xsl:value-of select="datum"/><br/>
     <b>Naam:</b> <xsl:value-of select="naam"/><br/>
     <b>Bedrijf:</b> <xsl:value-of select="bedrijf"/><br/>
     <b>Adres:</b> <xsl:value-of select="adres"/><br/>

Ik vind het zelf altijd duidelijker om ook hiervan gewoon aparte templates te maken. Je hebt dan bovendien geen value-of meer nodig met een select attribuut. Je kan apply-templates gebruiken om de default text() template toe te passen. De extra toestand kan je er zo om heen zetten in een template voor datum, naam, bedrijf en adres.
code:
1
2
3
4
5
6
7
8
9
<a>
    <xsl:attribute name="href">
            <xsl:value-of select="website"/>
    </xsl:attribute>
    <xsl:attribute name="target">
        blank
    </xsl:attribute>
    <xsl:value-of select="website"/>
</a>

Niks mis mee, maar dit vind ik zelf duidelijker:
code:
1
2
3
<a href="{website}" target="blank">
   <xsl:value-of select="website/text()"/>
</a>

Merk de { .. } om website op.

Hoop dat het helpt om XSL makkelijker te maken :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Pak eens <br /> ipv <br/>

Verwijderd

Topicstarter
Otis en mravenboer, jullie zijn helden!

In één klap ongeveer 3/4 van mijn XSL vragen/onduidelijkheden opgelost :) :)...

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
SpiritX: In één klap ongeveer 3/4 van mijn XSL vragen/onduidelijkheden opgelost :) :)...
Das snel :) .
Succes dermee verder :)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Op maandag 15 oktober 2001 12:08 schreef mbravenboer het volgende:
code:
1
2
3
4
5
6
7
8
9
<a>
    <xsl:attribute name="href">
            <xsl:value-of select="website"/>
    </xsl:attribute>
    <xsl:attribute name="target">
        blank
    </xsl:attribute>
    <xsl:value-of select="website"/>
</a>

Niks mis mee, maar dit vind ik zelf duidelijker:
code:
1
2
3
<a href="{website}" target="blank">
   <xsl:value-of select="website/text()"/>
</a>

Merk de { .. } om website op.
Wanneer ik deze indeling gebruik krijg ik een link die verwijst naar {website} ipv de url...?

Verwijderd

Topicstarter
Het probleem zoals hiervoor beschreven heb ik opgelost door naar een andere stylesheet namespace te verwijzen...
code:
1
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
SpiritX: Wanneer ik deze indeling gebruik krijg ik een link die verwijst naar {website} ipv de url...?
:? Tussen de { .. } kan je gewoon elke XPath expressie opnemen, zoals je die ook in het select attribuut van een value-of gebruikte... Je zou zeggen dat dit aan de XSL processor moet liggen. Welke gebruik je?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Op maandag 15 oktober 2001 19:30 schreef mbravenboer het volgende:

[..]

:? Tussen de { .. } kan je gewoon elke XPath expressie opnemen, zoals je die ook in het select attribuut van een value-of gebruikte... Je zou zeggen dat dit aan de XSL processor moet liggen. Welke gebruik je?
Zoals ik al schreef heb ik dit opgelost door een andere namespace te gebruiken. Nu werkt het wel.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
SpiritX: Zoals ik al schreef heb ik dit opgelost door een andere namespace te gebruiken. Nu werkt het wel.
Owh ok, mooi :) . Ik had begrepen dat de final-namespace ipv de working-draft het probleem met de br oploste :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1