如何在输出到 html 的 xsl 中添加新行

How to add new line in xsl with output to html

我在每个点后添加新行时遇到问题 (A., B., C.)

代码如下:

<?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>

我试过这些:&#xA; &#xd; &#xa; &#10; <text></text> 似乎没有任何效果。 还尝试了一个变量: xsl:text 但我不知道具体把声明放在哪里,但当我尝试不同的地方时,它没有用。

XML 文件:

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

在 XSLT 中控制 white-space 取决于 xsl:output@method,并且可能因处理器而异。

我分别和一起尝试了 &#x0A;&#x0D;,得到了不同的结果。我不知道这是因为 XSL 还是因为我在 Mac 上,而我的 Mac 通常期望 x0A (LF)。 Windows expects/uses CRLF,&#x0D;&#x0A;

在我的 Mac 上,使用 xsltproc,这个:

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

结果:

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

但这将在浏览器的一行中呈现:

就像@MartinHonnen 建议的那样,我建议使用 HTML 元素来控制外观:

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

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