fo:引用但未声明的实体

时间:2011-05-18 11:38:43

标签: xml entity doctype xsl-fo apache-fop

每当我尝试使用apache fop 1.0将.fo文件转换为.pdf时,我收到错误“实体0slash被引用但未声明”

我发现你可以在DTD中声明实体,但是,我的.fo文件没有DTD。应该有吗?如果没有,我该如何解决这个问题呢?优选地,不使用额外的.xsl或任何文件?

1 个答案:

答案 0 :(得分:4)

(注意:在我的回答中,我使用的是“Oslash”(哦斜线)而不是你问题中的“0slash”(零斜线)。因为你不能用数字开始实体名称,我假设零是一个错字。)

您有几个选择:

  1. 您可以修改创建XSL-FO的任何内容,以输出十六进制引用而不是ISO实体引用。在这种情况下,Ø将是Ø

  2. 您可以在DOCTYPE声明的内部子集中声明实体。

  3. 以下是添加了DOCTYPE的示例XSL-FO:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE fo:root [
    <!ENTITY Oslash "&#xD8;">
    ]>
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
        <fo:layout-master-set>
            <fo:simple-page-master master-name="page">
                <fo:region-body region-name="body"></fo:region-body>
            </fo:simple-page-master>
        </fo:layout-master-set>
        <fo:page-sequence master-reference="page">
            <fo:flow flow-name="body">
              <fo:block>Hello World! &Oslash;</fo:block>
            </fo:flow>
        </fo:page-sequence>
    </fo:root>
    

    如果您使用FOP处理此问题,则会获得:Hello World! Ø