zl程序教程

您现在的位置是:首页 >  其他

当前栏目

第四十七章 开发自定义标签 - 服务器文档对象模型

文档服务器对象开发 模型 自定义 标签
2023-09-11 14:15:37 时间

第四十七章 开发自定义标签 - 服务器文档对象模型

CSP编译器处理CSP文档时,它首先查找与规则匹配相关的所有标记。
当编译器扫描文档时,它会创建一个与CSP文档中包含的标记结构匹配的对象树。
这个树被称为服务器端文档对象模型,它直接类似于显示HTML页面时浏览器中可用的文档对象模型。

服务器端文档对象模型由类%CSP.AbstractAtom 的子类的实例组成,表示一个HTML文档的单元。一个HTML文档由两种类型的ATOM对象组成:RuleTextAtom,每种对象都由它们各自的类表示:%CSP.Rule%CSP.TextAtom。元素由%CSP.Rule的子类的实例表示,它表示一个HTML标记、其属性值的集合、其内部的HTML以及它可能包含的任何内部标记的集合。TextAtom表示不是元素的任何内容。为了提高效率,CSP编译器只为规则匹配中涉及的标记创建Element对象;其余的(例如,<b><i>标记)包含在TextAtom对象中。

例如,假设<MYTAG>标签有一个规则,下面的CSP文档:

<html>
<body>
Hello!
<MYTAG MSG="Welcome">
</body>
</html>

构造以下服务器端文档对象:

  • 一个带有TagNameHTML元素,包含子元素:
    • bodyTagName元素包含子元素:
      • 带有Hello!文本的TextAtom
      • 具有MYTAG标记名和Welcome属性(MSG)的元素。

服务器端文档对象模型只在页面编译期间创建;
它在运行时不存在(同样是为了提高效率)。
这就是为什么操作可能包含在编译时执行的表达式和代码的主要原因:以利用服务器端文档对象模型。

CSP编译器构建了文档对象模型之后,它通过访问树中的对象(深度优先)并触发与每个 %CSP.Rul相关联的规则来处理文档。并将结果呈现为可执行代码。根据定义,%CSP.TextAtom 对象没有规则,因此它们直接呈现在可执行代码中。

访问规则属性值

执行规则时,对%CSP的引用。与之关联的规则对象可通过当前对象使用。

例如,假设想要定义一个自定义<MESSAGE>标记,该标记使用粗体斜体文本显示由VALUE属性指定的消息:

<MESSAGE VALUE="Yo!">

对此的规则定义可能如下所示:

<csr:rule name="MESSAGE" match="MESSAGE" empty>
<csr:action>
<B><I>##(..GetAttribute("VALUE"))##</I></B>
</csr:action>
</csr:rule>

每当遇到<MESSAGE>标记时,就会触发消息规则(即调用RenderStartTag)。

  1. 写出< B >< I >标签。
  2. 写出标记对象的值
  3. 关闭< B >< I >标记。