首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xsl转pdf -空页

xsl转pdf -空页
EN

Stack Overflow用户
提问于 2013-01-02 03:07:11
回答 1查看 1.2K关注 0票数 0

我正在体验与xsl和pdf输出。我有一个这样的xml文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
  <document>
    <header>
      <author>my name</author>
    </header>
    <body>
      <text>some text</text>
    </body>
  </document>

我的xsl文件如下所示:

代码语言:javascript
复制
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:template match="/">
  <fo:root>

    <fo:layout-master-set>
      <fo:simple-page-master
        master-name="_title"
        page-height="29.7cm"
        page-width="21cm"
        margin="3cm">
        <fo:region-body/>
      </fo:simple-page-master>

      <fo:simple-page-master
        master-name="_body"
        page-height="29.7cm"
        page-width="21cm"
        margin="3cm">
        <fo:region-body/>
      </fo:simple-page-master>

      <fo:page-sequence-master master-name="titlepage">
        <fo:single-page-master-reference master-reference="_title"/>
      </fo:page-sequence-master>

      <fo:page-sequence-master master-name="body">
        <fo:repeatable-page-master-reference master-reference="_body"/>
      </fo:page-sequence-master>

    </fo:layout-master-set>

    <fo:page-sequence master-reference="titlepage">
      <fo:flow flow-name="xsl-region-body" font-family="Courier" font-size="12pt">
        <fo:block>
          <xsl:apply-templates select="header"/>
        </fo:block>
      </fo:flow>
    </fo:page-sequence>

    <fo:page-sequence master-reference="body">
      <fo:flow flow-name="xsl-region-body" font-family="Courier" font-size="12pt">
        <fo:block>
          <xsl:apply-templates select="body"/>
        </fo:block>
      </fo:flow>
    </fo:page-sequence>
    </fo:root>
  </xsl:template>

  <xsl:template match="header">
    <xsl:apply-templates />
  </xsl:template>

  <xsl:template match="body">
    <xsl:apply-templates />
  </xsl:template>
</xsl:stylesheet>

我希望有两个pdf页面,第一页与“我的名字”和第二页与“一些文本”。相反,我得到了两个空白页面。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-02 17:00:21

查看您的XSLT,您具有以下模板

代码语言:javascript
复制
<xsl:template match="/">

这与XML文档的“文档节点”相匹配。这与XML文档的顶级元素不同,在本例中是 document 。/实际上是顶级元素的父元素。

这意味着稍后在您的模板中,当您执行以下应用模板时,如下所示

代码语言:javascript
复制
<xsl:apply-templates select="header"/>
<xsl:apply-templates select="body"/>

它们分别有效地查找headerbody的顶级元素。但是,headerbody元素是顶级document元素的子元素。

要解决这个问题,您有几个选择。您可以使用以下内容替换您的应用模板:

代码语言:javascript
复制
<xsl:apply-templates select="document/header"/>
<xsl:apply-templates select="document/body"/>

或者,您可以更改初始模板以匹配以下内容(而不仅仅是<xsl:template match="/">)

代码语言:javascript
复制
<xsl:template match="/document">

同样值得注意的是,正如Dimitre在他的评论中提到的,在headerbody的模板中,您正在执行<xsl:apply-templates />。但是,您没有与headerbody的任何子元素匹配的模板。这意味着默认模板将生效,并且只输出元素的文本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14113343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档