/ Forside / Teknologi / Udvikling / HTML / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
HTML
#NavnPoint
molokyle 11184
Klaudi 5506
bentjuul 3377
severino 2040
smorch 1950
strarup 1525
natmaden 1396
scootergr.. 1320
e.c 1150
10  miritdk 1110
Xml + Xsl: Doctype-erklæring
Fra : Jesper Stocholm


Dato : 04-11-04 22:07

Jeg har en xml-fil, der er linket til en XSL-fil, så filens indhold
hentes via fx FireFox og præsenteres som html. Selve setup'et virker
sådan set som det skal.

Starten på min XSL-fil er

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <html xmlns="http://www.w3.org/1999/xhtml">
         <body>
            <h1>

Men som det ses, så mangler jeg DOCTYPE-erklæringen, men jeg kan ikke
få den flettet ind uden at jeg øderlægger mit stylesheet.

Spørgsmålet er så: Hvordan får jeg denne DOCTYPE-erklæring med?

--
Jesper Stocholm
http://stocholm.dk


 
 
Jesper Stocholm (05-11-2004)
Kommentar
Fra : Jesper Stocholm


Dato : 05-11-04 09:23

Jesper Stocholm <tdcnospam@stocholm.dk> skrev:
>Jeg har en xml-fil, der er linket til en XSL-fil, så filens indhold
>hentes via fx FireFox og præsenteres som html. Selve setup'et virker
>sådan set som det skal.
>
>Starten på min XSL-fil er
>
><?xml version="1.0" encoding="ISO-8859-1"?>
><xsl:stylesheet version="1.0"
>   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>   <xsl:template match="/">
>      <html xmlns="http://www.w3.org/1999/xhtml">
>         <body>
>            <h1>

Ja, nu endte jeg med at finde en løsning selv [0].



Nu sidder jeg og forsøger at få linieskift i min XML til at fremgå i
den html, der genereres via Xsl. Hvordan gør man det? Jeg har fundet
en løsning, der via en template udskifter linieskift med den normale
html-ækvivalente kode. Den er dog relativt kompliceret,

<xsl:template name="OutputPreformattedText">
<xsl:param name="text"/>
<xsl:choose>
      <xsl:when test="contains($text, '&#x0A;')">
      <xsl:call-template name="OutputPreformattedTextBlock">
         <xsl:with-param name="text" select="substring-before($text,
'&#x0A;')"/>
      </xsl:call-template><br/><xsl:call-template
name="OutputPreformattedText">
         <xsl:with-param name="text"
select="substring-after($text,'&#x0A;')"/>
      </xsl:call-template>
      </xsl:when>
<xsl:otherwise>
<xsl:call-template name="OutputPreformattedTextBlock">
<xsl:with-param name="text" select="$text"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template name="OutputPreformattedTextBlock">
<xsl:param name="text"/>
<xsl:variable name="first-character"
select="substring($text,1,1)"/>
<xsl:variable name="rest" select="substring($text,2)"/>
      <xsl:value-of disable-output-escaping="yes"
select="regexp:replace(string($text), '(http|https|ftp)([^ ]+)',
'gi','&#x3c;a href=&#x22;$1$2&#x22;&#x3E;$1$2&#x3C;/a&#x3E;')"/>
</xsl:template>


<xsl:template name="HtmlEscape">
<xsl:param name="text"/>
<xsl:variable name="first-character" select="substring($text,1,1)"/>
<xsl:variable name="rest" select="substring($text,2)"/>
<xsl:choose>
<xsl:when test="$first-character = '&#60;'"> <!-- "Less-than" sign
-->
<xsl:text>&lt;</xsl:text>
<xsl:call-template name="HtmlEscape">
<xsl:with-param name="text" select="$rest"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="$first-character = '&#62;'"> <!-- "Greater-than"
sign -->
<xsl:text>&gt;</xsl:text>
<xsl:call-template name="HtmlEscape">
<xsl:with-param name="text" select="$rest"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<!--<xsl:value-of select="$text"
disable-output-escaping="no"/>-->
<xsl:value-of disable-output-escaping="yes"
select="regexp:replace(string($text), '(http|https|ftp)([^ ]+)',
'gi','&#x3c;a href=&#x22;$1$2&#x22;&#x3E;$1$2&#x3C;/a&#x3E;')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>


Er ovenstående virkeligt den eneste løsning på problemet?

[0] http://www.dpawson.co.uk/xsl/sect2/N2281.html#d3521e13
--
Jesper Stocholm
http://stocholm.dk


Jens Peter Karlsen (06-11-2004)
Kommentar
Fra : Jens Peter Karlsen


Dato : 06-11-04 13:38

Det med doctypen fandt du jo selv ud af er nemt nok.
Her er dog lige den "korrekte" måde at gøre det på:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output omit-xml-declaration="yes" version="1.0" encoding="UTF-8"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="xhtml1-transitional.dtd" media-type="text/html"
method="xhtml" indent="yes" />
   <xsl:decimal-format name="minutter" decimal-separator = ':' />
   <xsl:variable name="minut">60</xsl:variable>
   <xsl:template match="galleri">
      <html>
      <head>

Angående linieskift:
Bare skriv <br /> der hvor du vil have den til at skifte linie.

Regards Jens Peter Karlsen. Microsoft MVP - Frontpage.

On 05 Nov 2004 08:22:33 GMT, Jesper Stocholm <tdcnospam@stocholm.dk>
wrote:

>Nu sidder jeg og forsøger at få linieskift i min XML til at fremgå i
>den html, der genereres via Xsl. Hvordan gør man det? Jeg har fundet
>en løsning, der via en template udskifter linieskift med den normale
>html-ækvivalente kode. Den er dog relativt kompliceret,
>
><xsl:template name="OutputPreformattedText">
> <xsl:param name="text"/>
> <xsl:choose>
>      <xsl:when test="contains($text, '&#x0A;')">
>      <xsl:call-template name="OutputPreformattedTextBlock">
>         <xsl:with-param name="text" select="substring-before($text,
>'&#x0A;')"/>
>      </xsl:call-template><br/><xsl:call-template
>name="OutputPreformattedText">
>         <xsl:with-param name="text"
>select="substring-after($text,'&#x0A;')"/>
>      </xsl:call-template>
>      </xsl:when>
> <xsl:otherwise>
> <xsl:call-template name="OutputPreformattedTextBlock">
> <xsl:with-param name="text" select="$text"/>
> </xsl:call-template>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
>
> <xsl:template name="OutputPreformattedTextBlock">
> <xsl:param name="text"/>
> <xsl:variable name="first-character"
>select="substring($text,1,1)"/>
> <xsl:variable name="rest" select="substring($text,2)"/>
>      <xsl:value-of disable-output-escaping="yes"
>select="regexp:replace(string($text), '(http|https|ftp)([^ ]+)',
>'gi','&#x3c;a href=&#x22;$1$2&#x22;&#x3E;$1$2&#x3C;/a&#x3E;')"/>
> </xsl:template>
>
>
><xsl:template name="HtmlEscape">
><xsl:param name="text"/>
><xsl:variable name="first-character" select="substring($text,1,1)"/>
><xsl:variable name="rest" select="substring($text,2)"/>
><xsl:choose>
> <xsl:when test="$first-character = '&#60;'"> <!-- "Less-than" sign
>-->
> <xsl:text>&lt;</xsl:text>
> <xsl:call-template name="HtmlEscape">
> <xsl:with-param name="text" select="$rest"/>
> </xsl:call-template>
> </xsl:when>
> <xsl:when test="$first-character = '&#62;'"> <!-- "Greater-than"
>sign -->
> <xsl:text>&gt;</xsl:text>
> <xsl:call-template name="HtmlEscape">
> <xsl:with-param name="text" select="$rest"/>
> </xsl:call-template>
> </xsl:when>
> <xsl:otherwise>
> <!--<xsl:value-of select="$text"
>disable-output-escaping="no"/>-->
> <xsl:value-of disable-output-escaping="yes"
>select="regexp:replace(string($text), '(http|https|ftp)([^ ]+)',
>'gi','&#x3c;a href=&#x22;$1$2&#x22;&#x3E;$1$2&#x3C;/a&#x3E;')"/>
> </xsl:otherwise>
></xsl:choose>
></xsl:template>
>
>
>Er ovenstående virkeligt den eneste løsning på problemet?
>
>[0] http://www.dpawson.co.uk/xsl/sect2/N2281.html#d3521e13


Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408936
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste