gpt4 book ai didi

xslt - 从使用 XSL 生成的 HTML 中删除空格

转载 作者:行者123 更新时间:2023-12-01 08:02:12 26 4
gpt4 key购买 nike

背景

在生成 HTML 的同时保持可读的 XSL 源代码,而不会在句子及其终止标点符号之间引入空格。来自 Rethinking XSLT :

White space in XSLT stylesheets is especially problematic because it serves two purposes: (1) for formatting the XSLT stylesheet itself; and (2) for specifying where whitespace should go in the output of XSLT-processed XML data.

问题

XSL 模板包含以下代码:

  <xsl:if test="@min-time &lt; @max-time">
for
<xsl:value-of select="@min-time" />
to
<xsl:value-of select="@max-time" />
minutes
</xsl:if>

<xsl:if test="@setting">
on <xsl:value-of select="@setting" /> heat
</xsl:if>
.

例如,这会生成以下输出(空格与显示的完全相同):

    for
2
to
3
minutes
.

所有主流浏览器都产生:

for 2 to 3 minutes .

几乎完美无缺,除了单词 minutes 之间的空格和标点符号。期望的输出是:

for 2 to 3 minutes.

可以通过删除 XSL 模板中的缩进和换行符来消除空格,但这意味着 XSL 源代码很丑陋。

解决方法

最初将所需的输出包装在一个变量中,然后按如下方式写出:

<xsl:value-of select="normalize-space($step)" />.

这一直有效,直到我尝试包装 <span>元素到变量中。 <span>元素从未出现在生成的 HTML 代码中。以下代码也不正确:

<xsl:copy-of select="normalize-space($step)" />.

技术细节

样式表已经使用:

<xsl:strip-space elements="*" />
<xsl:output indent="no" ... />

相关

问题

如何告诉 XSLT 处理器消除该空格?

谢谢!

最佳答案

除了使用 copy-of 之外,您还可以使用一个额外的模板来应用标识模板,该模板可以修剪文本节点中的空格。您只需像在第一个解决方法中那样创建一个变量。

你打电话:

<li><xsl:apply-templates select="$step" mode="nospace" />.</li>

模板:

<xsl:template match="text()" mode="nospace" priority="1" >
<xsl:value-of select="normalize-space(.)" />
</xsl:template>

<xsl:template match="node() | @*" mode="nospace">
<xsl:copy>
<xsl:apply-templates select="node() | @*" mode="nospace" />
</xsl:copy>
</xsl:template>

关于xslt - 从使用 XSL 生成的 HTML 中删除空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10576448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com