Avatar billede bbe1379 Nybegynder
17. maj 2005 - 16:08 Der er 3 kommentarer og
2 løsninger

vbCrlf til br

Hvem kan hjælpe mig med at få lavet linieskift i en tekst om til html br-tags. Meget gerne i selve XSL-filen

Jeg har forsøg at erstatte vbCrlf med <br /> i ASP-koden, som fletter XML og XSL-filerne sammen, men af en eller anden grund bliver de droppet undervejs, og kommer ikke med i HTML'en.
Avatar billede janegil Nybegynder
18. maj 2005 - 12:52 #1
Så er spørsmålet hvordan nylinje er representert i XML-sourcen, om det er CFLF, CR eller LF eller noe helt tredje. Prøv noen flere muligheter i ASP, denslags er mulig - men litt på tvers - i XSLT
Avatar billede Slettet bruger
18. maj 2005 - 23:56 #2
Een af de smarte features ved XML er at det er påkrævet parseren at "normalisere" linjeskift til &#xA; (Se evt. http://www.w3.org/TR/2004/REC-xml-20040204/#sec-line-ends)

MEN: Grunden til at dine <br/> tags ikke kommer med ud, kan meget vel være fordi du bruger <xsl:value-of> i stedet for <xsl:apply-templates> eller <xsl:copy-of>... 

Forskellen er:
<value-of> overfører alle text() nodes (<br/> er et element)
<copy-of> overfører en nøjagtig kopi
<apply-templates> kræver at du laver en decideret template til <br/> (og f.eks. <hr/>):

<xsl:template match="br | hr"><xsl:copy-of select="."/></xsl:template>

/CS
Avatar billede bbe1379 Nybegynder
19. maj 2005 - 07:41 #3
takker.
Jeg forsøgte lige med copy-of, men det gjorde ikke nogen forskel. Jeg har faktisk fundet en template til at ersatte linebreak, men jeg synes det virker helt vildt at det er nødvendigt men rekursiv funktion til at løbe teksten igennem:

    <xsl:template match="node()" mode="replaceLineBreaks" name="replaceLineBreaks">
        <xsl:param name="string" select="." />
            <xsl:choose>
                <!-- if the string contains a line break... -->
                <xsl:when test="contains($string, '&#xA;')">
                    <!-- give the part before the line break... -->
                    <xsl:value-of select="substring-before($string, '&#xA;')" />
                    <!-- then a br element... -->
                    <br />
                    <!-- and then call the template recursively on the rest of the string -->
                    <xsl:call-template name="replaceLineBreaks">
                        <xsl:with-param name="string" select="substring-after($string, '&#xA;')" />
                    </xsl:call-template>
                </xsl:when>
                <!-- if the string doesn't contain a line break, just give its value, followed by a br element -->
                <xsl:otherwise>
                    <xsl:value-of select="$string" /><br />
                </xsl:otherwise>
            </xsl:choose>
    </xsl:template>

...som jeg kalder med:

<xsl:apply-templates select="item_text" mode="replaceLineBreaks" />

Er det virkeligt måden at gøre det på med en template?
Avatar billede Slettet bruger
20. maj 2005 - 00:36 #4
Well, hvis copy-of ikke fungerer er det tegn på at din ASP replace ikke virker, hvilket jo nok er fordi den kigger efter kombinationen CRLF, som i outputtet naturligvis (jvf. ovenstående) er blevet normaliseret til LF - prøv lige med vbLF (mener den findes - hvis ikke, kan Chr(10) gøre det) og derefter copy-of.

Ellers er der nok kun den rekursive template tilbage...

/CS
Avatar billede bbe1379 Nybegynder
29. maj 2005 - 14:06 #5
hey,
jeg har desværre ikke haft mulighed for at teste endnu, men jeg satser på at det virker - så her er pointene. Tak for hjælpen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester