使用XMLTransform和XSL-FO格式化報表
2024-07-21 02:38:50
供稿:網友
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,將其保存到表中,然后從數據庫產生一致的、高質量的報表。