第四十六章 开发自定义标签 - 标签匹配 操作中的运行时表达式

简介: 第四十六章 开发自定义标签 - 标签匹配 操作中的运行时表达式

第四十六章 开发自定义标签 - 标签匹配 操作中的运行时表达式

指定标签的属性值,方法是将属性值放在方括号内,标签名称后是[ ]

<csr:rule>标记的match属性定义了CSP编译器应该将什么识别为规则,然后执行指定的操作。match属性是由/(斜杠)字符分隔的一个或多个标记名组成的字符串。如果有一个以上的标记名,则假定它们是嵌套的,从左到右指定,从最外面的标记到最里面的标记。*(星号)字符是匹配任何标签的通配符。

为了更好地说明这一点,让我们看看下表中的一些匹配值示例。

为匹配的最内层标签触发一个规则。如果相同的标记有多个规则定义,CSP编译器会通过确定哪个匹配值最具体来确定使用哪个规则。例如,AAA/ BBB的规则比BBB的规则更具体。类似地,指定属性值的规则,比如BBB[CCC],比不指定属性值的规则BBB更具体。

标签匹配的示例

匹配值 规则被触发:
AAA 每当遇到<AAA>标记时:<AAA></AAA>
AAA/BBB 每当遇到直接嵌套在<AAA>标签中的<BBB>标签时:<AAA> <BBB></BBB> </AAA>
AAA/*/BBB <BBB>标签嵌套在<AAA>标签的任何地方时:<AAA><FFF> <BBB></BBB> </FFF></AAA>
AAA[CCC] 当遇到带有CCC属性(有任何值)的<AAA>标签时:<AAA CCC= " 10 " ></AAA>
AAA[CCC=22] 当遇到CCC属性值为“22”<AAA>标签时:<AAA CCC= " 22 " ><AAA>
AAA[CCC=22]/*/BBB <BBB>标签嵌套在具有值为“22”CCC属性的<AAA>标签中的任何地方时:<AAA CCC= " 22 " ><FFF> <BBB></BBB> </FFF></AAA>

规则操作中的服务器端表达式和代码

规则中的操作可能包含在执行页面(运行时)或编译页面(编译时)时执行的表达式和代码。

操作中的运行时表达式

要在操作中指定运行时表达式,请使用可以在CSP页面中使用的相同的#(expr)#语法。 例如,下面是一个规则的定义,它定义了一个<TODAY>标签,使用Caché $ZDATE命令显示当前时间:

<csr:rule name="TODAY" match="TODAY" empty>
<csr:action>
Today is: <b>#($ZDATE($H))#</b>
</csr:action>
</csr:rule>
复制代码

如果你加载了这个规则,你可以把它放在CSP页面的主体中:

<TODAY>
复制代码

当请求页面时,显示当前日期。

动作中的编译时表达式

要在操作中指定编译时表达式,请使用##(expr)##语法。 例如,下面是一个规则的定义,该规则定义了一个标记<LASTMOD>,该标记显示CSP页面最后一次编译的时间。 在编译页面时计算##()##表达式。 计算表达式的结果成为生成的CSP页面的静态部分。

<csr:rule name="LASTMOD" match="LASTMOD" empty>
<csr:action>
This page was last compiled on: <b>##($ZDATE($H))##</b>
</csr:action>
</csr:rule>
复制代码

可以在运行时表达式中包含编译时表达式。 在下面的例子中,第一个$H在运行时计算,给出当前日期。 第二个函数在编译页面时计算,返回页面编译的日期。

This page is #(+$H - ##(+$H)##)# days old.
复制代码

<script>操作中的标签

类似地,可以在一个操作中包含多行代码,使用<script language=cache runat=server>标记表示运行时代码,使用<script language=cache runat=compiler>标记表示编译时代码。 例如,下面是一个规则,它创建了一个包含100项的无序列表:

<csr:rule name="BIGLIST" match="BIGLIST" empty>
<csr:action>
<ul>
<script language="Cache" runat=server>
For i = 1:1:100 {
    Write "<li>Item " _ i _ $C(13,10)
}
</script>
</ul>
</csr:action>
</csr:rule>
复制代码

如果你加载了这个规则,你可以像这样把它放在CSP页面的主体中:

<BIGLIST>
复制代码

当请求该页面时,将显示一个包含100项的无序列表。

相关文章
|
3月前
动态范围匹配逻辑实现
动态范围匹配逻辑实现
13 0
|
6月前
模版匹配
模版匹配
24 1
|
9月前
Thymeleaf ${}中的表达式本质是OGNL-分支与迭代-包含其他模板文件
Thymeleaf ${}中的表达式本质是OGNL-分支与迭代-包含其他模板文件
28 0
“关联表单”组件文本数据筛选只支持包含条件的解决方案
在“关联表单”中使用数据筛选功能筛选文本时条件只有”包含“,此文章通过增加一个”下拉单选“组件,变相解决这个问题。
152 0
|
XML 编译器 Go
第四十五章 开发自定义标签 - 规则和操作
第四十五章 开发自定义标签 - 规则和操作
|
JavaScript 前端开发 Go
第二十八章 使用 CSP 进行基于标签的开发 - 运行时表达式
第二十八章 使用 CSP 进行基于标签的开发 - 运行时表达式
用IHTMLDocument2接口获取页面上想要的数据,代替正则表达式
原文:用IHTMLDocument2接口获取页面上想要的数据,代替正则表达式 原文发布时间为:2010-07-01 —— 来源于本人的百度文章 [由搬家工具导入]1. 用 IHTMLDocument2::all 获得所有元素; 2. 用 IHTMLElementCollection::tags 获得标签为 span 的元素; 3. 用 IHTMLElement::className 获得 class 名为 EX 的元素; 4. 用 IHTMLElement::innerText 获得文本。
1069 0