zoukankan      html  css  js  c++  java
  • 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="100%;padding-top: 5px; padding-left: 5px;"> <zxl:container table-id="zgSysCliNavPage"> <!--每个组的循环--> <table style=" 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"/>

  • 相关阅读:
    C#如何调用非托管的C++Dll
    CList 点击表头排序 (3)两种排序的第二种
    CList 点击表头排序 (2)两种排序方法中其中一种
    CList 点击表头排序 (1)SortItems函数
    CListCtrl 隔行变色
    C++去掉字符串中首尾空格和所有空格
    Dialog和FormView如何派生通用类
    STL中erase()的陷阱
    socket 笔记(一)
    prettyJson V7.1 使用
  • 原文地址:https://www.cnblogs.com/headchen/p/1457832.html
Copyright © 2011-2022 走看看