开发者社区


C++/C | Java | .Net/Windows | Linux/Unix | 开源 | 其他
首页 - 编程
编程
全文搜索:   

使用XMLTransform和XSL-FO格式化报表
作者: Builder.com
2004-04-05 12:19:36


本文译自Builder.com,未经许可请勿转载

XMLTransform SQL函数使得应用程序开发人员能够不用第三方报表工具就直接从数据库产生高质量的格式化报表。

XMLTransform内嵌于SQL,因此它能够被任何能够连接到数据库并运行简单SQL语句的客户程序使用。

可扩展样式表语言(XSL)是指将一个XML文档转换成另外一种结构的XML的工具,它支持条件、XPath树遍历、循环和排序构造。XSL格式化对象(XSL-FO)也是一个XML应用程序,但是它支持各种高质量格式的文档的产生,比如说PDF、PostScript,甚至是GIF。

很多FO处理器是免费的,比如Apache FOP,而其它是内嵌于XML编辑器和处理器的。很多供应商开始推出WYSIVWYG编辑器来创建XSL-FO文件,这是必要的,因为XSL-FO可能会极度复杂。

下面给出一个非常简单的例子,首先假设我有一个XML文档:

<doc>Hello World</doc>

如果我需要使用“Hello World”以24-point大小的Arial字体产生一个PDF页面,我想要一个大概像下面这个样子的XSL-FO文档:

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
  <fo:layout-master-set>
    <fo:simple-page-master master-name="my-page">
      <fo:region-body margin="1in"/>
    </fo:simple-page-master>
  </fo:layout-master-set>
  <fo:page-sequence master-reference="my-page">
    <fo:flow flow-name="xsl-region-body">
      <fo:block font-family="Arial" font-size="24pt">Hello World</fo:block>
    </fo:flow>
  </fo:page-sequence>

</fo:root>

这大概是你所能够产生的最简单的XSL-FO文件了。如果我将其保存为“hello.fo”然后通过一个XSL-FO处理器运行它,我就可以产生这个文档的一个PDF或PostScript表示。

要从我的XML文档得到我的XSL-FO文档,我需要一个XSL样式表来完成文档之间的转换:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
            <fo:layout-master-set>
                <fo:simple-page-master master-name="my-page">
                    <fo:region-body margin="1in"/>
                </fo:simple-page-master>
            </fo:layout-master-set>
            <fo:page-sequence master-reference="my-page">
                <fo:flow flow-name="xsl-region-body">
                    <fo:block font-family="Arial" font-size="24pt">
                        <xsl:value-of select="/doc"/>
                    </fo:block>
                </fo:flow>
            </fo:page-sequence>
        </fo:root>
    </xsl:template>
</xsl:stylesheet>

XSLT处理器没有什么缺点,本文最关心的是内建于Oracle9iSQL产生我的XML文档,我可以使用:

select XMLElement("doc",'Hello World') from dual;

要使用SQL在数据库内部自动产生FO文档,我可以使用:

set long 1000000
select XMLTransform(
    XMLElement("doc",'Hello World'),
    XMLType(
    '<xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="/">
            <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
                <fo:layout-master-set>
                    <fo:simple-page-master master-name="my-page">
                        <fo:region-body margin="1in"/>
                    </fo:simple-page-master>
                </fo:layout-master-set>
                <fo:page-sequence master-reference="my-page">
                    <fo:flow flow-name="xsl-region-body">
                        <fo:block font-family="Arial" font-size="24pt">
                            <xsl:value-of select="/doc"/>
                        </fo:block>
                    </fo:flow>
                </fo:page-sequence>
            </fo:root>
        </xsl:template>
    </xsl:stylesheet>')) result
  from dual;

这里给出了使用SQL从数据库产生一个XSL-FO文档的最简单方法。在实际的环境中,你可以在一个WYSIWYG编辑器中从外部操纵XML和XSL-FO,将其保存到表中,然后从数据库产生一致的、高质量的报表。



责任编辑:李宁

欢迎评论投稿

声明:
Builder.com.cn(原ZDNet China应用开发频道)原创文章版权所有,未经许可严禁转载,且不构成投资建议。
近期相关报道:
实用技术文档
J2me XML
C/C++ C#
Java Oracle
Mysql .Net
VB.NET CSS
SQL Server 数据库
SQL UNIX
Linux Jsp
PHP Perl
Javascript IIS
XHTML ColdFusion
ASP/ASP.NET Apache
AJAX
订阅技术邮件
订阅"技术圈"杂志!请在下面选择您感兴趣的专题,填写e-mail地址,然后按订阅按钮:
应用开发管理
VS.NET 周刊
Database 周刊
WEB Service周刊
JAVA 周刊
IT 认证
Windows服务器周刊
互联网开发
当Windows Server 2008专家得5000元现金大奖
CNET NETWORKS 中国: 爱卡汽车网 | CNET科技资讯网 | e询网 | CWEEK | 蜂鸟网 | GameSpot China | 个人电脑 | PChome | SPN | 网友世界 | ZDNet China | 中关村在线
CNET NETWORKS 美国: BNET | CNET.com | CNET Download.com | CNET News.com | CNET Reviews | CNET Shopper.com | GameSpot | MP3.com | mySimon | Release 1.0 | Search.com | TechRepublic | TV.com | Webshots | ZDNet
Copyright (c) 2006 CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
ZDNet 公司标识是 CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号