🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)
1
| <xsl:value-of select="" disable-output-escaping="yes"/> |
Ducati: making mechanics out of riders since 1946
heb
enter"/>
of <elem>ik
heb
enter
</elem>
Volgens de specificaties van XML hoeft deze namelijk geen 'waarde' te hechten aan enters in attributen. Hier zul je dan ook geen oplossing behalve handwerk voor vinden. (En indien je het op de een-of-andere manier wel voor elkaar krijgt -> let me know!)
Indien de enters in de waarden zitten kun je de xsl parser vertellen dat enters van waarde zijn en preserved moeten worden - ik meen mij te herrineren door gebruik van <xsl:preserve-space elements="elem"/> als direct kind binnen je xsl:stylesheet>
Lets remove all security labels and let the problem of stupidity solve itself
Ja die optie had ik ook gevonden, maar dat lijkt niets uit te maken.TheNameless schreef op donderdag 23 november 2006 @ 12:21:
Heb je hier al naar gekeken?
XML:
1 <xsl:value-of select="" disable-output-escaping="yes"/>
Overigens moet ik bij select="" wel wat invullen, anders krijg ik een 'expression expected' error.
Mijn data is dus alsvolgt:
<message>regel 1<br />regel 2</message>
Maar in IE (7) wordt dit weergegeven als "regel 1 regel 2"
🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)
Het gaat om enters in de waarden.ikke007 schreef op donderdag 23 november 2006 @ 12:25:
Staan je regeleindes in attributen van de xml of in de waarden? (<elem attrib="ik
heb
enter"/>
of <elem>ik
heb
enter
</elem>
Volgens de specificaties van XML hoeft deze namelijk geen 'waarde' te hechten aan enters in attributen. Hier zul je dan ook geen oplossing behalve handwerk voor vinden. (En indien je het op de een-of-andere manier wel voor elkaar krijgt -> let me know!)
Indien de enters in de waarden zitten kun je de xsl parser vertellen dat enters van waarde zijn en preserved moeten worden - ik meen mij te herrineren door gebruik van <xsl:preserve-space elements="elem"/> als direct kind binnen je xsl:stylesheet>
De preserve-space lijkt ook niets uit te maken helaas.
🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)
Rustacean
1
| <xsl:apply-templates select="message"/> |
1
2
3
4
| <message>
regel 1<br />
regel 2
</message> |
Het volgende probleem is nu dat de MSXML DOM object de < en > van de <br /> vervangt door < en > equivalenten....
Maar ik ben er bijna !
🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)
Ja dat is logisch natuurlijk. Die <br/> is ook gewoon geldige XML.Rhapsody schreef op donderdag 23 november 2006 @ 12:26:
[...]
Ja die optie had ik ook gevonden, maar dat lijkt niets uit te maken.
Overigens moet ik bij select="" wel wat invullen, anders krijg ik een 'expression expected' error.
Mijn data is dus alsvolgt:
<message>regel 1<br />regel 2</message>
Maar in IE (7) wordt dit weergegeven als "regel 1 regel 2"
Kijk hier eens:
http://www.w3schools.com/xml/xml_cdata.asp
Ducati: making mechanics out of riders since 1946
Ja ik weet dat het logische XML is, maar waarom geeft ie het dan niet als een regeleinde weer?TheNameless schreef op donderdag 23 november 2006 @ 12:57:
[...]
Ja dat is logisch natuurlijk. Die <br/> is ook gewoon geldige XML.
Kijk hier eens:
http://www.w3schools.com/xml/xml_cdata.asp
🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)
Zodra de XSLT engine de <br> tag tegenkomt gaat hij kijken of daar een template voor gedefinieerd is, maar dat is er niet, dus slaat hij de tag gewoon over.
Zoals Manuzhai al zegt, om hier wel iets van betekening aan te geven, zou je een template moeten definiëren voor de <br> tag.
Maar als je de kans hebt om je XML aan te passen dan zou ik dat doen en dan doen zoals het eigenlijk hoort, en dat is om het in een CDATA tag te zetten.
Ducati: making mechanics out of riders since 1946
Verwijderd
Moet in de XML de CDATA tag bruiken om \n er in te laten of om de <br /> gewoon te laten staan?
Dus <![CDATA[<br/>]]> of <![CDATA[\n]]> of <![CDATE[
]]??
XML met XSL is geen HTML dus volgens mij heeft zorgt <br /> niet voor een linebreak. Maar ik wil toch dat de data uit met XSL de nieuwe regels krijgt.
Voorbeeld XML:
1
2
3
4
5
| <?xml version="1.0" encoding="UTF-8"?> <root> <content>Hallo Tweakers</content> </root> |
En de XSLT:
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
| <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="xml" omit-xml-declaration="yes"/> <xsl:template match="/"> <xsl:call-template name="nl2br"> <!-- aanroepen functie/template met parameter --> <xsl:with-param name="text" select="root/content"/> </xsl:call-template> </xsl:template> <!-- nl2br() functie --> <xsl:template name="nl2br"> <xsl:param name="text" select="."/> <xsl:choose> <xsl:when test="contains($text, '&# 10;')"> <!-- &# 10; is de newline die moet worden omgezet --> <xsl:if test="string-length(substring-before($text, '&# 10;')) > 0"> <xsl:value-of select="substring-before($text, '&# 10;')"/> </xsl:if> <br /> <xsl:call-template name="nl2br"> <xsl:with-param name="text" select="substring-after($text,'&# 10;')"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:if test="string-length($text) > 0"> <xsl:value-of select="$text"/> </xsl:if> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> |
Werkt uitstekend op OS X en Linux, niet getest op Windows.
Doe er je voordeel mee.
Resultaat in oXygen:
1
| Hallo<br/> Tweakers |
Edit: &# 10; moet je schrijven ZONDER spatie tussen # en de 1, Tweakers maakt er een zootje van...
Edit: Helaas, werkt ook niet, ik hou het op de &# 10; met overbodige spatie
[ Voor 6% gewijzigd door cariolive23 op 04-04-2009 22:59 . Reden: valt dus tegen... :? Spaties mag je zelf even verwijderen ]
Dat is geen bug, dat is een feature:cariolive23 schreef op zaterdag 04 april 2009 @ 22:17:
Edit: &# 10; moet je schrijven ZONDER spatie tussen # en de 1, Tweakers maakt er een zootje van...
1
2
3
4
5
6
7
| [*] [*] &#10; [*] [norml] [/norml] [*] [nohtml] [/nohtml] |
Resulteert in:
•
•
•
•
[ Voor 3% gewijzigd door Sebazzz op 04-04-2009 22:53 ]
[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]
Alles in de tag waarin de <br />'s staan moet je tussen de CDATA tags zetten. Zoiets dus:Verwijderd schreef op zaterdag 04 april 2009 @ 16:06:
Ik heb hetzelfde probleem, maar begrijp de oplossing nog niet zo goed.
Moet in de XML de CDATA tag bruiken om \n er in te laten of om de <br /> gewoon te laten staan?
Dus <![CDATA[<br/>]]> of <![CDATA[\n]]> of <![CDATE[
]]??
XML met XSL is geen HTML dus volgens mij heeft zorgt <br /> niet voor een linebreak. Maar ik wil toch dat de data uit met XSL de nieuwe regels krijgt.
1
2
3
4
| <?xml version="1.0" encoding="UTF-8"> <root> <element><![CDATA[Tekst met een<br />nieuwe regel!]]></element> </root> |