在XSL FO文档中编写XSLt

时间:2011-05-25 10:09:29

标签: xml xslt xsl-fo

我是XSL FO的初学者。 我有一个非常简单的XML文档:

<?xml version= "1.0" ?>
<test>
TEST
</test>

我想在标记<test>

之间打印内容

我编写了以下XLS FO文档,由FOP处理。

<fo:root xmlns:yt="http://www.yseop.com/text/2" 
xmlns:y="http://www.yseop.com/engine/3" 
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


   <fo:layout-master-set>
      <fo:simple-page-master master-name="rapport">
         <fo:region-body margin-top="0.75in" margin-left="0.75in" margin-right="0.75in" margin-bottom="0.75in"/>
         <fo:region-after extent="0.25in"/>
         <fo:region-start/>
      </fo:simple-page-master>
   </fo:layout-master-set>

   <fo:page-sequence master-reference="rapport">

       <fo:flow flow-name="xsl-region-body">
            <fo:block>
            XXX
                <xsl:apply-templates select="document('D:\XXX-conseilVente\xmlBatch\input_test1.xml')/test"/>
            </fo:block>
      </fo:flow>
   </fo:page-sequence>



</fo:root>

我收到以下警告:

      [fop] 25 mai 2011 12:05:10 org.apache.fop.events.LoggingEventListener processEvent
      [fop] ATTENTION: Unknown formatting object "{http://www.w3.org/1999/XSL/Transform}apply-templates" encountered (a child of fo:block}. (See position 22:99)

我的输出pdf没有任何内容。

我想我没有使用正确的函数用xsl -t

解析文档

你能告诉我使用什么功能吗?

提前致谢

1 个答案:

答案 0 :(得分:4)

XSLT和XSL-FO是两种不同的语言。基本上,它的工作方式与您目前所做的相反:FO嵌入在XSLT样式表中,然后用于处理原始XML以创建XSL-FO文档(没有任何XSLT)。这是在XSL-FO处理器上抛出来创建的,例如PDF。

    XSLT     processing
     |           |
XML ---> XSL-FO ---> PDF

所以你从这样的XSLT样式表开始(没有命名空间等等,只是为了给你一个想法):

<xslt:stylesheet>

  <xslt:template match="/">
    <fo:root>
      <!-- fo head -->
      <fo:page-sequence>
        <fo:flow>
          <xslt:apply-templates /> <!-- process the rest of the doc-->
        </fo:flow>
      </fo:page-sequence>
    </fo:root>
  </xslt:template>

  <xslt:template match="test">
    <fo:block>
      <xslt:value-of select="." />
    </fo:block>
  </xslt:template>

</xslt:stylesheet>

您可以在Dave Pawson's XSL FAQ找到许多问题。