【问题标题】:How to add new line in xsl with output to html如何在 xsl 中添加新行并输出到 html
【发布时间】:2022-01-02 11:16:45
【问题描述】:

我在每个点(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>

我已经尝试过这些:&amp;#xA; &amp;#xd; &amp;#xa; &amp;#10; &lt;text&gt;&lt;/text&gt;,但似乎没有任何效果。 还尝试了一个变量: 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>

【问题讨论】:

  • 如果目标格式是 HTML,您是否曾经编写过 HTML 并学会在 HTML 中插入换行符,例如使用br 元素?
  • HTML 中也有语义元素,例如有序列表,带有 olli 元素,这可能更合适。

标签: html xml xslt xslt-1.0


【解决方案1】:

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

我已经分别尝试过&amp;#x0A;&amp;#x0D;,并且得到了不同的结果。我不知道这是因为 XSL 还是因为我在 Mac 上,而我的 Mac 通常期望 x0A (LF)。 Windows 期望/使用 CRLF,&amp;#x0D;&amp;#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>
...

【讨论】:

    猜你喜欢
    • 2015-06-05
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 2020-01-03
    相关资源
    最近更新 更多