如何从页面序列中检索xsl-fo标记?

时间:2012-08-28 15:51:29

标签: xslt xsl-fo

我正在使用XSL-FO标记来生成运行头,而我在检索书名方面遇到了麻烦。我有一个解决方法,但我认为必须有一个更优雅的解决方案。由于书名仅在书的开头显示为文本,因此我的标记与我的静态内容不在同一页序列中。是否有检索页外序列标记的机制?

我正在使用XSLT Formatter V 4.3来生成PDF版本,但我没有和它结婚。

一个非常简化的XML示例:

<book>
<bktitle>Alice in Wonderland</bktitle>
<chapter>
<chaptitle>Chapter 1</chaptitle>
<para>This is the story of Alice in Wonderland.</para>
</chapter>
</book>

XSL-FO的片段:

<fo:page-sequence master-reference="fm">
  <fo:title>Alice in Wonderland</fo:title>
  <fo:flow flow-name="xsl-region-body">
     <fo:block font-variant="small-caps">
        <fo:marker marker-class-name="book">Alice in Wonderland</fo:marker>Alice in Wonderland</fo:block>
  </fo:flow>
</fo:page-sequence>

<fo:page-sequence master-reference="body">
  <fo:title>Chapter 1</fo:title>
  <fo:static-content flow-name="header">
     <fo:block><fo:retrieve-marker retrieve-class-name="book"/></fo:block>
  </fo:static-content>
  <fo:flow flow-name="xsl-region-body">
     <fo:block font-variant="small-caps">
        <fo:marker marker-class-name="chapter">Chapter 1</fo:marker>Chapter 1</fo:block>
     <fo:block>This is the story of Alice in Wonderland.</fo:block>
  </fo:flow>
</fo:page-sequence>

2 个答案:

答案 0 :(得分:1)

如果您使用retrieve-boundary="document"

,它应该有效
<fo:retrieve-marker retrieve-boundary="document" retrieve-class-name="book"/>

答案 1 :(得分:0)

由于你的静态内容确实是静态的 - 毕竟书的标题并没有在书的中途改变 - 使用相同的逻辑将bktitle的内容放入第一个fo:page-sequence也把它放在fo:static-content/fo:block

FO格式化程序还可以使用较少的标记来存储,并且可以执行相当多的标记查找,但您可能不会看到这会对处理速度产生可测量的差异。