我正在使用 XSLT 样式表(由 Antennahouse 提供)将 XHTML 转换为 XSL-FO 文件。我在 XHTML 文件中将一个空行定义为 2 个连续的 HTML BR 标记。现在,XSL-FO 格式不提供对空行的本机支持。我想通过向样式表为 BR 标记插入的 fo:block 添加高度来解决此限制。然而,我是 XSLT 语言的新手,并且在执行此操作时遇到了一些问题。
我可以弄清楚如何为我遇到的每个 BR 标签插入这个高度,但我只希望当彼此之后有 2 个 BR 标签时插入空行(否则将在每个文本后插入一个空行,后跟 BR标签。)
我制作了一个“无意义”表达式(11 大于 10),它将定义何时插入常规 fo:block 或带有 space-after="1em" 的 fo:block。显然这个表达式没有任何意义,它应该检查的是这个 BR 元素是否是连续的第二个元素。如果有人可以在这里帮助我或为我指明正确的方向,我将不胜感激。
这就是我现在所拥有的:
<xsl:template match="html:br">
<xsl:choose>
<xsl:when test="11 > 10">
<fo:block space-after="1em">
<xsl:call-template name="process-common-attributes"/>
</fo:block>
</xsl:when>
<xsl:otherwise>
<fo:block>
<xsl:call-template name="process-common-attributes"/>
</fo:block>
</xsl:otherwise>
</xsl:choose>
作为参考,这是一段 XHTML,我希望将双 BR 标签转换为空行,但单 BR 标签应该只是常规换行符。
<div style="color: #000000; font-family: arial; font-size: 10pt; font-style: normal; font-weight: normal;">
<span>description</span>
<br/>
<span>using</span>
<br/>
<span>multiple</span>
<br/>
<span>lines</span>
<br/>
<br/>
<span>with</span>
<br/>
<br/>
<span>blank</span>
<br/>
<br/>
<span>lines</span>
<br/>
</div>
与此类似的事情。
仅匹配那些<br>
s 后面直接跟一个元素 (following-sibling::*[1]
)本身就是一个<br>
([self::html:br]
):
<xsl:template match="html:br[following-sibling::*[1][self::html:br]]">
<fo:block space-after="1em" />
</xsl:template>
并扔掉那些<br>
直接前面有一个<br>
,以避免双倍空格。通过将它们与空模板匹配,它们将被有效删除:
<xsl:template match="html:br[preceding-sibling::*[1][self::html:br]]" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)