CusReport使用手册

 


Table of Contents

概述
转换原理
CusReport的XML元素介绍
<zxl:root>元素
<zxl:container>元素,表循环元素
<zxl:text if="boolExpression"> 文本元素
<zxl:attribute>属性元素
<zxl:if if="ifExpression">元素
<zxl:const if="Expression">元素
<zxl:value if="Expression">元素
<zxl:var name="varName">元素
<zxl:comment>元素
[[textTempate]]文本模板

概述


通过CustomReport的Xml格式定义,可以非常容易地将一个Datasource序列化后的Xml转换为xhtml或者其他格式。 但使用者必须了解其原理并深刻掌握各种元素以及文本模板的含义。

另外使用者应该掌握一些xslt的基本原理。

转换原理


首先进行序列化: Zgsoft.Datasource->DataTree--(序列化)->DataTree.Xml

第一次转换:DataTree.Xml->提取cusReportXml--(用zgCusReport.xslt转换)->[[中间的xslt]]

第二次转换:DataTree.Xml----([[中间xslt]]转换) ----->html

CusReport的XML元素介绍


<zxl:root>元素
说明:

根元素,也是整个xml文档的根元素,整个xml是从这个元素开始解析的,一般都用来生产<html>元素,以及<head><body>元素。

在实际的转换过程中,可以把<zxl:root>看成是<zxd:data>的对应。

格式:

<zxl:root xmlns:zxl="http://www.cpcsoft.com/data/xslt">

Important

必须在<zxl:root>元素中申明zxl的命名空间属性 xmlns:zxl="http://www.cpcsoft.com/data/xslt"。

示例:

<zxl:root xmlns:zxl="http://www.cpcsoft.com/data/xslt"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>客户端导航</title> </head> <body><zxl:var name=""/>

父元素

子元素

任何html元素或者cusReport元素。

<zxl:container>元素,表循环元素
说明:

为核心元素之一。表示对表的每一行进行转换,也就是说:转换的是<zxd:row>元素。若转换的Datasource支持分页,则会自动加上“当前页”的过滤条件。

格式:

<zxl:container table-id="tableName" filter="filterExp">

支持的属性(attribute)
atrribute 选项 说明
table-id 必选 限定当前的表式哪一个表,其值为表的表名称(Name)或者id
filter
可选
对表中行的过滤条件,若引用字段的话用@fieldName,满足xpath的语法。
if
可选

在外层生成if条件,仅仅当条件满足后,才进行表循环调用。

 

父元素

<zxl:root>或者<zxl:container>,或者其他的html元素,比如table ,div等。

子元素

<zxl:container>,任何其他的html元素。

Important

<zxl:container>元素可以嵌套。当出现嵌套时,嵌套的层次结构和原来dataTree的层次必须一一对应, 不能跳跃级别到父亲或者孙子,只能为其直接子表。

xslt当前节点node

为<zxd:row>元素,即表的相应的行元素。

示例:

<div style="width:100%;padding-top: 5px; padding-left: 5px;"> <zxl:container table-id="zgSysCliNavPage"> <!--每个组的循环--> <table style="width: 100%; font-size:12px;"> <zxl:container table-id="zgSysCliNavPageItemGroup"> <!--分组标题--> <tr> <td style=" font-weight:bold; padding:5px 5px 5px 5px"> <zxl:text>[[@f_caption]] </zxl:text> </td> </tr>

在上例中,<xsl:container table-id=="zgSysCliNavPage">,在转换时, 会对表zgSysCliNavPage的每一行进行迭代,生成其 子元素的部分。

<zxl:text if="boolExpression"> 文本元素
说明:

用来生产一个元素的文本值,可以用属性模板[[]],也可以包含下级元素<zxl:const><zxl:value>。

Important

尽管可以直接给某个元素的文本写值,但只有<zxl:text>才能使用模板和变量,也就是说可以引用数据行中的字段值,从而能够生成“动态文本”。

Caution

若一个元素存在常量文本,同时存在<zxl:text>元素,则在转换后会以<zxl:text>元素的值覆盖常量文本。若存在并列多个<zxl:text> 元素,则他们之间间不会覆盖,而是会“串接”起来。

父元素:

一般为任意可以包含文本的html元素。

子元素:

文本模板,也可以使用<zxl:const> <zxl:value>元素。

属性:

if ,可以选,表示只有当条件满足时,才生成文本。

示例:

<a> <zxl:attribute name="href">javascript:void 0;</zxl:attribute> <zxl:attribute name="onclick"> window.external.Call('[[@f_cliOpId]]','[[@f_cliParams]]','[[@f_srvParams]]') </zxl:attribute> <zxl:text>[[@f_caption]] </zxl:text> </a>

在上例中<zxl:text>[[@f_caption]] </zxl:text>中使用了文本模板,从而生成了<a>元素的文本值。当当前行的f_caption字段变化时,会自动把其值赋值给<a>元素。

<zxl:attribute>属性元素
说明:

用来给一个html元素增加或者修改属性。若原来元素相应的属性已经存在,则会覆盖。

父元素:

一般为html元素。

子元素:

文本值模板。或者<zxl:const>和<zxl:value>元素。

属性 if:

if 可以选,只有当if属性的值为真时,才生成此属性。

注意:

当有多个<zxl:attribute>元素时,后面的会覆盖前面的。通过if属性可以满足 if else if else之类的嵌套。

示例:

<a> <zxl:attribute name="href">javascript:void 0;</zxl:attribute> <zxl:attribute name="onclick"> window.external.Call('[[@f_cliOpId]]','[[@f_cliParams]]','[[@f_srvParams]]') </zxl:attribute> <zxl:text>[[@f_caption]] </zxl:text> </a>

在上例中,通过多个<zxl:attribute>生成<a>元素的各种属性,比如:href, onclick等。同理,可以生产style等属性。

<zxl:if if="ifExpression">元素
说明:

用在html元素里面,作为子元素,用来代替@if属性(在html元素中不能有@if属性)。用在其他元素中,则会被忽略。 其作用为:当此元素if属性的值为真时,则生成父元素,否则不生成父元素。

父元素:

任何html元素。

子元素:

无。

示例:

<a><zxl:if if="@f_test"/></a>

属性if

必选,为当前节点环境下的逻辑表达式。

转换后的目标元素:

<xsl:if>注意生成的<xsl:if>在其父元素的"外层"。

<zxl:const if="Expression">元素
说明:

一般情况下用文本值模板来代替,他是中间转换中生成的元素。但因为他可以有if属性,所以可以在需要需要条件时使用。 其中不能有属性值表达式,不能有变量,只能是常量文本。

转换模板元素:

若其父元素为:<zxl:text>则转换为:<xsl:text>。若其父元素为<zxl:attribute>,则直接转换为文本,不生成元素。

父元素:

<zxl:attribute> <zxl:text>

子元素:

<zxl:value if="Expression">元素
说明:

一般情况下用文本值模板来代替,他是中间转换中生成的元素。但因为他可以有if属性,所以可以在需要需要条件时使用。 其中不能有属性值表达式,和<zxl:const>元素不同的是:他可以带有变量:比如字段@fieldName,或者环境变量$var等。

转换模板元素:

[<xsl::if]<xsl::value-of select=".">[<xsl:if>]

父元素:

<zxl:attribute> <zxl:text>

子元素:

<zxl:var name="varName">元素
说明:

定义外部变量。一般用在html网页处理中,以用户的选择不同而呈现不同的界面。

转换模板元素:

<xsl:variable name={@name}/>

父元素:

<zxl:root>

子元素:

<zxl:comment>元素
说明:

仅仅给中间转换的xsl增加注释。

转换模板元素:

<xsl:variable name={@name}/>

父元素:

<zxl:root>

子元素:

[[textTempate]]文本模板
说明:

可以用在<zxl:attribute>和<zxl:text>元素中,用来简单的“嵌入”生成相应的信息。在实际的转换中,会自动转换为<zxl:const>和<zxl:value>元素。

父元素

<zxl:attribute>, <zxl:text>

示例

<a> <zxl:attribute name="href">javascript:void 0;</zxl:attribute> <zxl:attribute name="onclick"> window.external.Call('[[@f_cliOpId]]','[[@f_cliParams]]','[[@f_srvParams]]') </zxl:attribute> <zxl:text>标题:[[@f_caption]] </zxl:text> </a>

在上例中,[[@f_cliOpId]]','[[@f_cliParams]]','[[@f_srvParams]]会自动转换为3个<zxl:value>元素。 标题:[[@f_caption]]会转换为 <zxl:const>标题:</zxl:const><zxl:value">@f_caption<zxl:value>. 最终会转换为: <xsl:text>标题:</xsl:text><xsl:value-of select="@f_caption"/>

posted @ 2009-05-15 17:15  headchen  阅读(188)  评论(0编辑  收藏  举报