• 1
您现在的位置: 信丰中学>> 教育技术>> 技能培训>>正文内容

技能培训

SiteFactory标签解析大揭秘(五)

本节文章的将为您介绍SiteFactory模板标签中比较特别的一类,数据源标签。

关键字:数据源 XSLT节点

一、数据源标签的概念

首先我们需要弄清楚一个基本概念,数据源标签本质上也是普通的查询列表类标签,它与普通标签的区别只是在模板内的调用方法不同。数据源标签的基本设计思路来自微软的.NET系统,与C#中提供的数据源+XML声明的调用方式十分类似。

二、标签解析工作原理及与普通标签的区别

在本系列第一节中,笔者曾经简单介绍过数据源标签的工作模式与区别,现在让我们重新开始来详细说明数据源标签的工作方式,我们假设有普通列表标签名为“标签一 ”,页面模板内的调用方式为:

{pe.label id=”标签一” /}

下面简单图示它的解析流程:

SiteFactory标签解析大揭秘

图(1)

可以看到,标签一读取的数据,所有的处理都在标签内部完成,处理结果在页面内一个完整的“块”内进行显示。

我们再看看还是这个标签,我们把它转化为普通数据源标签后,页面内调用方式变为:

{pe.datasource id=”标签一”/}

页面内其他代码

{pe.field id=”标签一” fieldname=”字段一”/}

广告代码

{pe.field id=”标签一” fieldname=”字段二”/}

广告代码

{pe.field id=”标签一” fieldname=”字段三”/}

页面内其他代码

它又是如何在页面上显示的呢?请看下图:

SiteFactory标签解析大揭秘

图(2)

转化为数据源类标签后,从上图可以看到,处理过程中多了一个XML树的解析过程,标签被分化为若干节点,其中每个节点的内容都是数据库中对应的字段内容。

到这里,我们可以总结出普通标签与数据源标签的不同。普通标签建立后即可调用并自动在页面模板的对应位置显示内容,而数据源标签的调用方法,则是需要首先在页面顶部引入数据源标签,同时还需要在模板对应的位置再引入字段标签才能显示内容。

三、XSLT参数说明

首先说明一下,数据源标签支持本标签建立时创建的所有参数,但与普通标签不同的是它不支持通用参数span及class,而额外支持一个通用参数xslt,这是一个需要重点说明的参数,它只有两个参数值可选,true或者false,使用方法如下:

{pe.datasource id=”标签一" xslt=”true” /}

它的作用十分重要,是指定数据源标签是否打开XSLT解析的开关,当它设置为真时,数据源解析到XML树结构后,会增加一个XSLT解析的过程,以格式化输出结果,增加的流程如下图:

SiteFactory标签解析大揭秘

图(3)

为什么要指定这么一个参数呢?举例说明一下。当标签打开默认数据源输出方式后,字段内容不经任何处理就输出为XML节点,当您只需要输出简单内容时,这种方式效率最高,但内容格式无法得到控制,举例如下:

假设字段一实际内容为:12345

普通数据源标签调用得到的内容为:12345

增加XSLT解析后,输出就可以格式化为:$12345.00

那么,我们如何去控制格式化方法呢?以上面的输出为例简单说明:

在普通数据源标签状态下:标签模板失去作用,数据由XML引擎直接发送到页面,节点名称也由字段名称自动生成,调用方法为:{pe.field id=”标签一" fieldname= ”字段一"/}

增加xslt参数后:标签模板应依照以下固定方式编写

<root>

<节点一>

$<xsl:value-of select=”format-number(12345, '#####.00')”/>

</节点一>

<节点二>

字段二的处理过程…

</节点二>

<节点三>

字段三的处理过程…

</节点三>

</root>

那么,我们在页面内的调用方法变为:{pe.field id=”标签一" fieldname=”节点一"/}

注意上面fieldname的变化,这就是XSLT处理的关键,我们在xslt=”true”的状态下,需要人工建立输出节点,并设置节点内的解析方法,同时也带来的好处是,节点可以脱离数据库的约束,比如上例中,我们甚至可以手动建立

<节点四>

节点四内容

</节点四>

那么就可以在页面模板中通过: {pe.field id=”标签一" fieldname=”节点四"/},来调用手工写在节点四中的内容。

四、field字段标签参数说明

{pe.field id=””/}这是一个与数据源标签配套使用的字段显示标签,它是一类十分特殊的标签。它的特点是:

一 它无须人工建立,而是随着数据源标签自动产生。

二 它没有可定义的参数,而只有几个固定参数。

下面是全部参数的说明:

{pe.field

id=”数据源名称”

fieldname=”显示节点名”

htmldecode=”是否进行HTML解码显示”

length=”输出字符长度”

charge=”是否收费标签”

shower=”收费权限不足时,是否显示错误信息”

inlabelproc=”是否处理内部的嵌套标签” /}

五、循环标签

数据源标签并不是只能显示查询到的一条数据,配合循环声明,它也可以象普通列表标签一样按格式显示查询到的若干条记录,循环声明标签常用格式如下:

{pe.datasource id=”标签一”/}

{PE.Repeat id=”标签一” loop=”10”}

{PE.Field.AutoId/}

{pe.field id=”标签一” fieldname=”字段一”/}

其他摸板代码

{pe.field id=”标签一” fieldname=”字段二”/}

{pe.field id=”标签一” fieldname=”字段三”/}

{/PE.Repeat}

看到了吧,上面绿色的标签对就是循环定义标签,很简单的调用方式,它只有两个参数:id是数据源对应的,而loop则是指定最大循环次数,这里的具体循环次数是这么定义的:

如:数据源查询数量 》 loop定义的值 :输出loop定义的数量

如:数据源查询数量 《 loop定义的值 :输出数据源查询出的数量

{PE.Field.AutoId/}

这个用来输出循环的记数,一般的输出顺序为0,1,2,3….,如果你需要从3开始输出,那么可以通过在loop标签中定义loopbase=”3” 来强制从3开始输出,举例说明:

1:

{PE.Repeat id=”标签一” loop=”10”}

{PE.Field.AutoId/},

{/PE.Repeat}

输出为 0,1,2,3,4,5,6,7,8,9,

2

{PE.Repeat id=”标签一” loop=”10” loopbase=”3”}

{PE.Field.AutoId/},

{/PE.Repeat}

输出为 3,4,5,6,7,8,9,10,11,12,