XSL与XSL-FO初探

更新时间:2023-07-27 08:04:32 阅读: 评论:0

XSL与XSL-FO初探
1 前言
因为工作任务涉及到异构数据交换和展示,其中任务涉及到XML数据转换应用的XSLT和XSL-FO两个关键技术点,此文就将对XSL-FO技术初步的探索成果与大家分享如下.
2 XSL与XSL-FO的关系
XSL(EXtensible Stylesheet Language -扩展样式表语言)由两个主要部分组成:
用于转换 XML 文档的语言
用于指定格式化语义的 XML 词汇表
在这里,SytleSheet中的样式化(Styling)包含了两个含义,一个是转换信息,一个是格式化信息.
XSL的第一个部分是XSLT,第二个部分是XSL-FO(即XML SytlesSheet Language-Formatting Objects) ,目前通常也称为XSL(注意:这个通称与扩展样式表语言名称相同,不要混淆).
XSLT 通过将带标记的数据转换成美观的文档来使 XML 文档可读。通过使用 XSLT 处理器,应用定义在样式表中的规则来完成文档转换。这种方法需要一个 XML 文档作为源文件,需要另一个带格式化信息(样式表)的文档,还需要处理器。但是如果想使用 XML 而又不想对付两个文档,该怎么办呢?答案是:在文档中包含格式化信息。
XSL-FO提供了一组标记,可以用这些标记来定义文档如何显示给用户,使用FO,可以定义页面布局,字体风格,颜色,图像显示和许多其他设计特性.
    XSL-FO文档存储在以.fo或.fob为后缀的文件中,其实也可以以.XML为后缀存储.
FO 文件由以下各部分组成:
柿子汁
一个 XML 头和名称空间声明
页面布局信息
页眉和页脚内容
文本内容
结束标记
关于XSL-FO规范格式,可以阅读 400 多页的  W3C XSL-FO 规范规范文档,链接如下:www.w3/TR/xsl/
目前,仅有少量的可选替代方法可以使 XSL-FO 文件有用。将 FO 文件转换成可读格式的最好选项是:
PDF格式
RTF格式
HTML格式
OOXML Word格式
3 XSLT与XSL-FO的区别
XSLT是指的XSL Transformation,专门用于进行XML数据转换(Data Transformation)。
XSL(EXtensible Stylesheet Language)是XSLT的前身,本来包含了XML数据表达(data prentation)和数据转换两个目的。由于两个目的截然不同,数据转换部分就逐渐从中独立出来成为一个新的建议(XSLT, W3C Recommendation 16 November 1999)。剩下的数据表达部分成为XSL-FO, XSL Formatting Object,目前还是草案。现在称XSL有人指XSLT,有的人指XSL-FO,所以要区分清楚。
在原来的一篇专家网文章《利用XML+XLST+XMLSchema实现数据交换》中曾介绍过通过XSLT对纯数据的XML进行数据交换的应用。常见的场景如下图,通过输入一个XML文件,通过XSLT文件进行转换,生成另外一个新的XML文件,其中设计到一些简单的函数以及语法。
其中一个很重要的标准-XHTML(eXtensible HyperText Markup Language,可扩展超文本置标语言)通过将纯数据XML通过XLST文件输出成XHTML标准格式的网页文件实现基本的HTML数据展示。
而XSL-FO是数据和格式混合的文件,而这个文件是通过XSLT格式将XML数据文件转换为XSL-FO元素构成的文件,然后通过某种显示引擎将fo文件转换成某种显示文件。
4 XSL-FO文件的生成
XSL-FO文件生成有三种方式
1. 在对XSL-FO规范了解的基础上,通过代码解析XML文档,对应生成输出fo文件
2. 通过XSL样式文件来完成文档之间的转换
3. 通过可视化工具自动生成对应输出fo文件,推荐使用Altova StyleVision 2011
例如,例子XML文档内容如下:
<doc>第一个fo PDF </doc> 
通过代码生成最基本的fo文件
  string s = "Hello World";
            StringBuilder sb = new StringBuilder();
            sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
            sb.Append("<fo:root xmlns:fo=\"www.w3/1999/XSL/Format\">");
            sb.Append("<fo:layout-master-t>");
            sb.Append("<fo:simple-page-master master-name=\"my-page\">");
            sb.Append("<fo:region-body margin=\"1in\"/>");
            sb.Append("</fo:simple-page-master>"奥林匹克会歌);
            sb.Append("</fo:layout-master-t>");
            sb.Append("<fo:page-quence master-reference=\"my-page\">");
            sb.Append("<fo:flow flow-name=\"xsl-region-body\">");
            sb二哈多少钱一只.Append("<fo:block font-family=\"Arial\" font-size=\"24pt\">" + s + "</fo:block>");
            sb.Append("</fo:flow>");
            sb.Append("</fo:page-quence> ");
            sb.Append("</fo:root> ");
然后将字符串保存为FirstDemo.fo文件。
通过XSL样式文件进行转换
XSL文件大概如下:
<?xml version="1.0" encoding="UTF-8"?>
  <xsl:stylesheet version="1.0" xmlns:xsl="www.w3/1999/XSL/Transform">
    <xsl:template match="/">
      <fo:root xmlns:fo="www.w3/1999/XSL/Format">
        <fo:layout-master-t>
          <fo:simple-page-master master-name="my-page">
            <fo:region-body margin="1in"/>
          </fo:simple-page-master>
        </fo:layout-master-t>
        <fo:page-quence master-reference="my-page">
          <fo:flow flow-name="xsl-region-body">
            <fo:block font-family="Arial" font-size="24pt">
              <xsl:value-of lect="/doc"/>
            </fo:block>
搞笑句子          </fo:flow>
        </fo:page-quence>
      </fo:root>
    </xsl:template>
  </xsl:stylesheet>
然后通过 的XslTransform类进行转换 ,代码如下:
XslTransform myXslTransform;无法拒绝的辞职理由
//读取XML文件       
            XPathDocument myXPathDocument = new XPathDocument("firstDemo.xml");
            myXslTransform = new XslTransform();
//加载Xsl转换格式文件
            myXslTransform.Load("firstDemo.xsl");
            XmlTextWriter writer = new XmlTextWriter(古今"firstDemo.fo", System.Text.Encoding.UTF8);
//转换
            myXslTransform.Transform(myXPathDocument, null, writer);
青花瓷歌词            writer.Flush();
            writer.Clo();
            System.IO.StringWriter stWrite = new System.IO.StringWriter呼兰河传的好句();
            myXslTransform.Transform(myXPathDocument, null, stWrite);
5 XSL-FO文件的输出
通过各种方式生成了XSL-fo文件后,最后要做的是生成可以打印和预览的文件,可选择的格式有常用的HTML,PDF和RTF.
这时候就需要通过XSL-Fo Processor处理器来讲fo文件转换输出成选定格式的文件了.
    目前最常用的是Apache软件基金会提供的开源的Apache FOP项目,所支持的格式有PDF,PS,PCL,AFP,XML(区域树),Print,AWT,PNG,RTF,TXT.

本文发布于:2023-07-27 08:04:32,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1098431.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:文件   文档   转换   数据   格式   生成   输出
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图