Avatar billede kanyle Nybegynder
22. april 2002 - 16:14 Der er 14 kommentarer og
1 løsning

Linjeskift, wrap + diverse til tekstformat

Mit xml skal transformeres til tekst på en unixbox og jeg har (indtil videre) fundet følgende, der 'irriterer':
1) Hvordan kan jeg sørge for at min tekst bliver wrapped, således at det ikke fortsætter ud et par meget lange linjer?

2) Midt i teksten findes der en bulletlist <li> med x antal bullets. Jeg formatter således, at <li> bliver til "-" i mit tekstdokument. Problemet er at den sidste bullet ikke får et linjeskift, og teksten der kommer efter bullet'en fortætter som om det var en del af bullet'en.

Det var indtil videre det :)

/kanyle
Avatar billede nute Nybegynder
22. april 2002 - 16:28 #1
1) legg din tekst inn i tabeller

2) dette burde ikke forekomme hvis du bruker <li></li> for en bullet

/nute
Avatar billede nute Nybegynder
22. april 2002 - 16:33 #2
2) joda :-| Det er fordi <li> ikke er et box element. Hvis du sjekker om din bullet er den siste, så kan du jo skrive ut et linjeskift ?! noe ála

<xsl:for-each ...>
  ...
  <xsl:if test="position()=last()"><br/><xsl:if>
</xsl:for each>

/ntue
Avatar billede Slettet bruger
22. april 2002 - 16:36 #3
Du kan bruge:

  string-length(normalize-space(.))

til at finde længden på indholdet i et element eller en attribute.

Herefter kan "substring()" bruges til at klippe strengen over med...

/CS
Avatar billede nute Nybegynder
22. april 2002 - 16:41 #4
greystate >> det blir jo en utrolig "tung" operasjon hvis man har en streng som er 100 tegn, men kun vil vise 15 tegn i bredden. Så skal man jo til å lage en rekursiv streng-splitter...noe som høres litt voldsomt ut i forhold til å la tabeller formattere output'et

/nute
Avatar billede kanyle Nybegynder
22. april 2002 - 17:42 #5
Husk: Jeg skriver til en tesktfil som derfor IKKE må indeholde andet end tekst, ergo: intet HTML.

Greystate: Kan du give et eksempel på det, du skriver?

/ kanyle
Avatar billede kanyle Nybegynder
23. april 2002 - 13:57 #6
Hmmm - har fundet ud af (2), men kan ikke kommme videre med (1).

Vedr (1) er her et eksempel:
<bodytext>
<p>Vel in feugiat eros duis amet, te, blandit, odio duis te illum aliquip dolore aliquam consequat quis, diam vero. Exerci nulla, dolor ipsum esse in ut, ut nulla consequat eu wisi eum ullamcorper euismod autem quis facilisis vulputate vel illum esse ad minim commodo.</p><p>Vero at veniam in luptatum dolore dolor ullamcorper et consequat in laoreet, euismod nostrud et vel sit ut iusto quis augue feugiat adipiscing ut ad, lobortis. Enim erat dolore qui, qui sit elit minim blandit ullamcorper ex at diam augue nostrud. Nulla, tation, wisi, erat luptatum ullamcorper adipiscing, in exerci zzril nisl duis accumsan tincidunt, feugait suscipit dolore nisl et at nisl. Quis nonummy molestie qui vel augue eum dolor illum wisi luptatum, lorem delenit. </p>
</bodytext>

Denne bliver skrevet ud på én lang linje. Jeg vil gerne ha teksten til at wrappe således at hver linje er på eksempelvis 400chars. How to do? -Og nej - jeg kan ikke lægge det ind i en tabel fordi der MÅ IKKE VÆRE HTML i min tekstfil - kun ren tekst med linjeskift.

/kanyle
Avatar billede Slettet bruger
23. april 2002 - 14:38 #7
Her er lidt at kigge på:

        <xsl:variable name="maxlen">400</xsl:variable>
       
    <xsl:template match="bodytext">
        <xsl:apply-templates select="p" />
    </xsl:template>   
   
    <xsl:template match="bodytext/p">
        <xsl:param name="trimmed" select="normalize-space(text())" />
        <xsl:call-template name="output"><xsl:with-param name="tekst" select="$trimmed" /></xsl:call-template>   
    </xsl:template>

    <xsl:template name="output">
        <xsl:param name="tekst" />
        <xsl:choose>
            <xsl:when test="string-length($tekst) &gt; $maxlen">
                <xsl:value-of select="substring($tekst, 1, $maxlen)" /><br /><br />
                <xsl:call-template name="output"><xsl:with-param name="tekst" select="substring($tekst, $maxlen)" /></xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$tekst" />
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>


/CS
Avatar billede Slettet bruger
23. april 2002 - 14:44 #8
Erstat lige "<br /><br />" med "&#xa;" (linjeskift i "text" mode...)

/CS
Avatar billede kanyle Nybegynder
23. april 2002 - 14:58 #9
Det ser meget dejligt ud. Men ved det andet <p> (<p>Vero at veniam...) bliver der ikke breaket ved 100 chars (jeg satte maxlen til 100).

Et anden udfordring: Hvordan kan jeg sørge for at ordene ikke bliver brudte, dvs en form for word-wrap går jeg ud fra ?

Flere points gives gerne, hvis du har "brug for det" ;)

/kanyle
Avatar billede Slettet bruger
23. april 2002 - 15:21 #10
Virker fint her - hvad bruger du til at transformere med?

/CS
Avatar billede kanyle Nybegynder
23. april 2002 - 15:51 #11
Jeg bruger Xerces og Xalan. Break ved andet <p> virker, men den bryder stadig linjerne ved 100chars skarpt, og derved bliver ordene splittet op:
Eksempel:
------
- Det ser utroligt interessant ud, og jeg kan fore <slut linje>
estille mig, at det får en stor udbredelse, fordi  <slut linje>
man får en tiltalende præsentation af banerne, so <slut linje>
om ikke er set før, siger hun. Det tager ca. en må <slut linje>
åned at opbygge en virtuel model af en 18-hullers  <slut linje>
golfbane. Peter Boldsen regner med, at indtægtern <slut linje>
----
Avatar billede Slettet bruger
23. april 2002 - 16:03 #12
Ja det er jo noget skrammel :-)

Jeg ser lige at "substring($tekst, $maxlen)" skal ændres til "substring($tekst, $maxlen + 1)" for ikke at gentage karakter #100.

Mht. til at få brudt ordene korrekt - den er jo faktisk temmelig tricky, og kommer nok til at koste et point eller to ekstra :-)

Der er nok ingen vej uden om script i stylesheet'et, men så kan man jo også bruge Regular Expressions... jeg kigger på det.

/CS
Avatar billede kanyle Nybegynder
24. april 2002 - 11:11 #13
Jeg glæder mig til at se det :)

/kanyle
Avatar billede kanyle Nybegynder
18. august 2010 - 18:33 #14
Efter 8 år tror jeg at tråden lukkes :):)
Avatar billede Slettet bruger
18. august 2010 - 22:24 #15
Ajjjjjj - var liiige ved at have den :-)

/Chriztian
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