如何正确插入空白线



我试图弄清楚如何正确执行此操作。我尝试使用代码中的处理说明,但似乎根本被忽略了。

文本中:

end of a paragraph.<?linebreak?></p>

至于模板,我尝试了:

<xsl:template match="processing-instruction('linebreak')">
    <fo:block>
        <xsl:apply-templates/>
        <fo:leader/>
    </fo:block>
</xsl:template>

或仅出于测试目的:

<xsl:template match="processing-instruction('linebreak')">
    <fo:block>XXXX</fo:block>
</xsl:template>

无论我做什么,模板从未使用。

我在存在的db应用程序(3.0rc1)中使用它,但我认为这与现有db无关。有FOP 1.1。我不确定撒克逊版。

传统上,您不会在段落结束时插入换行路线。相反,您指定例如fo:包含该段落的fo:block上的空格below =" 12pt"。

即使您不想要它,也总是会插入断路(例如,当段落放置在页面底部时,线路断裂将包裹在下一页上。,因此,如果该空间出现在页面底部。这会导致看起来更好的布局。

无论我做什么,模板从未使用。

关于问题的这一部分,可能的解释是匹配父元素的模板(示例中的<p>在应用模板时默默地忽略处理指令。

例如,此准认定样式表忽略了处理元素时的处理指令,因此从未执行它们的匹配模板:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
  <xsl:template match="* | @*">
    <xsl:copy>
      <!-- this only processes elements, attributes and text nodes! -->
      <xsl:apply-templates select="* | @* | text()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="processing-instruction('linebreak')">
    XXXXX
  </xsl:template>
</xsl:stylesheet>

为了考虑处理指令,模板匹配元素必须明确也将模板应用于它们:

  <xsl:template match="* | @*">
    <xsl:copy>
      <xsl:apply-templates select="* | @* | text() | processing-instruction()"/>
    </xsl:copy>
  </xsl:template>

请注意,使用<xsl:apply-templates/>也无法正常工作,因为它不选择处理指令或属性,仅元素和文本节点。

最新更新