Home > Blockchain >  How to add new line in xsl with output to html
How to add new line in xsl with output to html

Time:01-03

I have problem with adding new lines after each point (A., B., C.)

Here is the code:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="1.0" encoding="UTF-8"/>
    <xsl:param name="css"/>
    <xsl:template match="/osoby/grupaStudentow/student[3]">
        <html>
            <body>
                <h1>
                    <b>zadanie 1</b>
                </h1>
                <t>
                    A. nazwisko biezacego elementu:
                    <xsl:value-of select="./child::nazwisko"/>

                    &#xd;B. element biezacy z podelementami:
                    <xsl:value-of select="descendant-or-self::*"/>

                    &#xd;C. element o nazwie grupaPracownikow:
                    <xsl:value-of select="following::grupaPracownikow"/>

                </t>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="/">
        <html>
            <body>
                <xsl:apply-templates select="//student[3]"/>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

I have tried these: &#xA; &#xd; &#xa; &#10; <text></text> and nothing seems to work. Also tried a variable: <xsl:variable name="newline">xsl:text</xsl:text></xsl:variable> but I don't know exacly where to put the declaration, but as I tried different places it didn't work.

XML file:

<osoby>
    <grupaStudentow>
        <student plec="m">
            <imie>Jan</imie>
            <nazwisko>Bohatyrowicz</nazwisko>
            <nrAlbumu>123459</nrAlbumu>
            <wiek> 21 </wiek>
            <zdobytePunkty> 40 </zdobytePunkty>
        </student>
        <student plec="k">  
            <imie>Stefania</imie>
            <nazwisko>Rudecka</nazwisko>
            <nrAlbumu>127687</nrAlbumu>
            <wiek> 23 </wiek>
            <zdobytePunkty> 100</zdobytePunkty>
        </student>
        <student plec="m">
            <imie>Teofil</imie>
            <nazwisko>Różyc</nazwisko>
            <nrAlbumu> 765432</nrAlbumu>
            <wiek> 24 </wiek>
            <zdobytePunkty> 80</zdobytePunkty>
        </student>
        <student plec="k">
            <imie>Aleksandra</imie>
            <nrAlbumu>445566</nrAlbumu>
            <nazwisko>Billowiczówna</nazwisko>
            <wiek> 22 </wiek>
            <zdobytePunkty> 75</zdobytePunkty>
        </student>
        <student plec="m">
            <nazwisko>Andrzej</nazwisko>
            <imie>Kmicic</imie>
            <wiek> 20 </wiek>
            <zdobytePunkty> 10</zdobytePunkty>
        </student>
    </grupaStudentow>
    <grupaPracownikow>
        <pracownik plec="m">
            <imie> Michał</imie>
            <nazwisko> Wołodyjowski</nazwisko>
            <nr_prac> 87987</nr_prac>
            <wiek> 60 </wiek>
        </pracownik>
        <pracownik plec="m">
            <imie> Bogusław</imie>
            <nazwisko> Radziwił</nazwisko>
            <nr_prac> 65665</nr_prac>
            <wiek> 40 </wiek>
        </pracownik>
        <pracownik plec="k">
            <imie> Barbara</imie>
            <nazwisko> Wołodyjowska</nazwisko>
            <nr_prac> 56734</nr_prac>
            <wiek> 45 </wiek>
        </pracownik>
    </grupaPracownikow>
</osoby>

CodePudding user response:

Controlling white-space in XSLT depends on the @method of xsl:output, and can vary from processor to processor.

I've tried &#x0A; and &#x0D; independently and together, and get different results. I cannot tell if that's because of XSL or because I'm on a Mac, and my Mac generally expects x0A (LF). Windows expects/uses the CRLF, &#x0D;&#x0A;

On my Mac, using xsltproc, this:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" version="1.0" encoding="UTF-8" />
    <xsl:template match="/">
        <html>
            <body>
                <xsl:text>Witam!</xsl:text>
                <xsl:text>&#x0D;&#x0A;</xsl:text>
                <xsl:text>Linia tekstu</xsl:text>
                <xsl:text>&#x0D;&#x0A;</xsl:text>
                <xsl:text>Kolejna linijka tekstu</xsl:text>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

results in this:

<html><body>Witam!
Linia tekstu
Kolejna linijka tekstu</body></html>

But that will one render on one line the browser:

Text on one line when HTML is rendered by browser

Like @MartinHonnen suggested, I suggest using HTML elements to control the appearance:

...
<body>
    <h2>Witam!</h2>
    <p>Linia tekstu</p>
    <p>Kolejna linijka tekstu</p>
</body>
...

or

...
<body>
    <h2>Witam!</h2>
    <p>
        Linia tekstu<br/>
        Kolejna linijka tekstu
    </p>
</body>
...
  • Related