组件TpiSyntaxAnalyzer配置语法

源代码下载和示例分析 C# 2.0
    本语法是一种高度定制化的配置显示内容的解决方案,可以在普通HTML中嵌入多种高级配置节点。配置节点可以实现读取并处理数据库字段,各种运行时数据的配置标识化,以及基于内置函数的一定程度的可编程化。

以下是对本配置语法的详细说明。本语法分为四部分:字段配置语法、自定义宏标识语法、自定义函数语法、流程控制语句语法。

1          字段配置节点

1.1         语法:<%[字段名]<属性1:值1><属性2:值2>%>

1.2         说明:本节点表示一个(或多个)数据库字段,同时可以配置各种属性,以对此字段进行各种处理。“属性”是指:设置各种行为,来指示以何种方式处理本字段内容,来满足我们实际的需要。
所有的字段配置节点均包含在边界符<%%>之中,以区分于其它的节点标记。
所有的属性均为并列关系,并被完全包含在“<>”(尖括号)之中,属性设置以“属性名:属性值”的形式表示。在设置属性值时还可以继续使用某个字段,用“[字段名]”来表示。示例。
所有的属性值都支持Unicode编码直接表示某个字符,例如:“中华”与“中"u534E”是一样的。另外,尖括号是特殊字符,任何属性值中均不得出现尖括号。如果确实需要使用尖括号,请用Unicode编码代替。
<("u003c)”、“>("u003e)”。

1.3         字段节点属性列表:

1.3.1    Length属性。限制字段内容的长度。
语法:Length:数字。表示此字段最多显示多少字。
示例:[摘要]<Length:500>。

1.3.2    Count属性。对于包含多个值的字段,限制单个值的个数,例如 [作者] 字段。
语法:Count:数字。表示最多显示指定数目的字段值。
示例:[作者] <Count:3> 。

1.3.3    Count和Length同时配置,则Length意义变为限制每个拆分项的字符长度。

1.3.4    Split属性。是否拆分字段。
语法:Split:True。表示此字段要根据分隔符进行拆分显示。

1.3.5    SplitChar属性。指定字段拆分字符。
语法:SplitChar:(分隔字符串列表)
示例: [摘要]<SplitChar:(,;,;)>。表示以逗号和分号作为分隔字符进行拆分。
而拆分后的多个结果之间使用<JoinChar>来作为分隔符

1.3.6    Link属性。给字段加上链接。如果本字段需要拆分,则先进行拆分,再给每个拆分后的项分别加链接。
语法:Link:链接Url。
示例:Link:/appName/detail.aspx? FileName=[文件名]&JourName=[中文刊名-英文刊名],其中[文件名]表示读取数据库的“文件名”字段。
注意:1. 自定义属性中不要出现“<”、“>”、“<%”或“%>”等特殊字符。
2. 如果此字段是拆分字段而且在属性中要使用本字段拆分后的单个值,则属性中的数据库字段必须设置为与此配置节字段完全相同,例如[中文关键词-英文关键词],不完全相同的字段会读取整个字段的值。例如:<%[中文关键词-英文关键词]<Link:/Kns50/ Keyword.aspx?sField=Keyword&sValue=[中文关键词-英文关键词]> <Split:True>%>,因为中文关键词被拆分为了多个值并且每个值都加链接,此时属性中的[中文关键词-英文关键词]就变成了拆分后的某一项的值,此过程是自动转化的。如果确实需要获取整个字段的值,请在字段或前或后加空格,比如 [中文关键词-英文关键词]。

1.3.7    LinkAttribute属性。链接自定义属性。此属性可以为链接设置各种附加属性。
语法:LinkAttribute:链接的html属性。
本属性的注意事项同“Link”属性,请注意遵守。

1.3.8    RemoveMarkRedFlag属性。 去掉字段内容中的标红标记(如果有的话)。
语法:RemoveMarkRedFlag:true|false
说明:如果对检索得到的记录集设置了标红标记,则所有参与检索的字段,均会加上标红标记。但如果是ID之类的字段的话,我们虽然用 ID 检索了,但我们并不希望ID也被标红。因为ID不会参与显示,但加上标红标记反而会让程序出错。通过设置此属性为“true”,来移除本字段中的标红标记。

1.3.9    ExcludeChars属性。从字段内容中排除某些字符(或字符串)。
语法:ExcludeChars:(分隔字符列表)。
说明:一般情况下,对“摘要”或“全文”等字段设置 Length 属性后,页面上显示的结果经常少于设置的字符数,这是因为里面包含了一些不可见的换行符等符号。本属性就可以移除数据库字段内容中的某些字符(或字符串),比如移除多余的换行符、空格等等。
示例:[摘要]<ExcludeChars:("r,[Some Strings here]"n"["].)>,表示移除下列所有的字符:换行符、半角逗号、换行符、左右方括号、半角句号以及用方括号包含的整个字符串。
对于这里的字符串有几点需要说明:1.字符串支持正则表达式,如果要使用正则表达式,请在字符串的起始和结尾加上“/”符号,并且要符合正则的规则。 2.因为字符串形式使用了方括号作为标识字符,因此如果字符串内包含方括号,请使用“"[”或“"]” 来进行转义。请注意:如果使用正则表达式的方式,则方括号又是正则表达式的特殊字符,因此这时正则的操作符方括号需要用“"[”或“"]”表示,而表示正则表达式中转义的方括号,请用“""[”或“""]”来表示,切记! 3.组件不会移除字符串两端的空格,除非确定字符串的两端确实需要空格,否则请不要在字符串的两端保留空格符。4.如果字符串包含尖括号,请使用它们的Unicode编码来代替。但是,用Unicode编码方式表示的字符只能配置为字符串的形式,即请用方括号包含。 5.如果有多个字符串的话,请将每个字符串各自用方括号包含,并列写在本属性之中。

1.3.10       过滤“作者机构”、“英文关键词”等字段的杂乱字符。

1.3.10.1    语法:FilterInvalidWord:True。表示要对字段进行杂乱字符过滤,设为False表示不过滤。

1.3.10.2    InvalidWordSplitChar: (分隔字符串列表) 指定本字段所用的分隔字符,意义同细览库的“SplitFlag”字段。如果不设置此属性,默认使用“,;,;.”这些分隔符

1.3.10.3    FilterWordMinLength:数字。指示过滤后的结果,如果少于此字数时被丢弃。例如:如果机构名称少于两个字符的话,一般为无效机构,因此此机构被丢弃。

1.4       复合字段及联合字段的配置。

1.4.1    复合字段。
减号(-)或者(|)连接多个字段表示多字段复合。意义为:依次读取每个字段直至某个字段内容不为空。
语法:[字段1-字段2-字段3]。

1.4.2    联合字段。
加号(+)连接多个字段表示字段联合。意义为:同时处理所有的字段,最后使用JoinChar属性指定的联合符,来联合各个字段处理结果。
语法:[字段1+字段2]。

1.4.3    JoinChar属性。联合字段的连接字符(串)。
语法:[字段1+字段2]<JoinChar:(-)>。
示例:JoinChar:(-)。表示各个联合字段的处理结果之间用减号连接。

1.4.4    如果配置为联合字段,同时又配置了某个或多个属性,则对每个字段均做同样的处理,最后再把各个字段的处理结果用 JoinChar 来连接。

1.5         节点嵌套说明:
字段配置节点间不允许嵌套,但可以嵌套用户自定义宏节点和自定义函数节点。

1.6         完整示例:
一个完整的字段配置示例为:

<%[中文关键词-英文关键词]<Count:5><Split:True><Link:info.aspx?dbcode=<%#dbCode#%>&w=[中文关键词-英文关键词]&author=[作者]>%>

2          用户自定义宏

2.1         语法:<%#宏名称#%>

2.2         说明:用户在调用本组件之前,可以预先对某些标记名称(宏)设定一个特定的值,然后在本组件的配置文件中,用这个标记来表示他们所设定的值。这里的“宏名称”就是用户事先设计好的标记名称。
之所以会有这类节点,是因为我们在用静态配置来表示我们的动态UI时,除了用到数据库字段数据外,还有很多地方是需要用到页面处理过程中的某些过程值。这些值是动态存在于页面处理过程中的,我们要在静态配置中体现这些动态变量,就需要为每个需要的变量设定一个标记名称,然后把这个名称和动态值进行关联,最后传递给本组件。本组件就会如实的把标记名称替换为对应的动态值,这样才能实现更高层次的配置化。
要使用自定义宏,需要先实例化一个UserMacro对象,然后把所有的自定义宏标记及其值均添加到此对象中,最后在本组件Render的时候传递进来,这样就可以实现宏替换了。

2.3       本组件内置如下宏:

2.3.1    当前页面 Url中所有的页面参数。
例如:page.aspx?type=TableView&…,可以直接用 <%#type#%> 来表示 “TableView” 。

2.3.2    Encoding : 当前语言代码( ‘gb‘、‘en‘、或 ‘bg‘ )

2.3.3    AppName : 当前Web项目的项目名。
首先读取WebConfig中的SiteSkin配置项,如果没有,则从Url中获取当前项目名,如:
http://www.cnki.net/kns50/test.aspx的 AppName就是Kns50。

3          内置自定义函数

3.1         语法:#函数名(参数1,参数2,…,参数n)

3.2         说明:本组件提供与其它编程语言意义一致的自定义函数功能,通过本功能可以在配置中实现更多、更复杂的功能,进一步增加了配置的灵活性。
函数名只能由字母、下划线、数字或汉字组成,且必须以#开头。
所有参数包含在()之中,请注意还有双引号。(之所以同时使用括号和双引号,是为了防止参数之中出现括号,而导致本节点整体提取失败。)
多个参数之间用逗号分隔。如果参数中出现逗号、双引号、左右单括号之中的任何一个字符,需要在字符前加“"”进行转义。

3.3         请注意:如果要使用某个数据库字段的内容作为参数,强烈建议直接使用「字段名」来表示,组件会读取字段的内容来进行处理,效果是一样的,但效率会提高很明显。
例如:#Count(”作者”),而不要使用 #Count(”<%[作者]%> ”)。

3.4         函数参数可以嵌套“字段配置节点”,组件会先解析此节点,然后把它的处理结果作为此函数的参数。

3.5         COUNT函数

3.5.1    完整语法:#COUNT(”文本,分隔字符”)

3.5.2    作用:计算指定文本(或字段)被指定的分隔符分隔后的个数。如果未指定第二个参数,则使用半角分号作为默认分隔符。

3.6         LENGTH函数

3.6.1    完整语法:#LENGTH (”文本”)

3.6.2    作用:计算指定文本(或字段)的字符个数。

3.7         CUT函数

3.7.1    完整语法:#CUT (”文本,数字”)

3.7.2    作用:截断指定文本(或字段)使不超过指定数目的字符长度。此方法只支持从右侧截断,保留左侧文本。如果不配置第二个参数,则此函数会原样输出,不会有任何变化。

3.8         Replace函数

3.8.1    完整语法:#Replace(”文本,旧字符串,新字符串”)

3.8.2    作用:把指定文本(或字段)中的旧字符串替换为新字符串。

3.8.3    补充说明:
如果是处理数据库字段,第一个参数请使用字段名。
第二个参数是要替换掉的字符串,支持正则表达式。如果要使用正则表达式,在字符串前后加 /即可。例如,/<span>(.*?)</span>/。若不使用正则表达式,则按照原始字符串进行匹配。
第三个参数是可选的,如果忽略的话,则使用空串替换匹配项,相当于移除匹配项。如果第二个参数使用正则表达式,本参数可以使用必要的正则标记,例如分组项标记,$1,$2,$&等。

3.9         HasField函数

3.9.1    完整语法:#HASFIELD (”文本”)

3.9.2    作用:判断指定数据库字段是否存在内容。存在返回”true”,否则返回”false”(均为小写字母)

3.10     UrlEncode函数

3.10.1完整语法:#URLENCODE (”文本[,true]”)

3.10.2作用:对指定文本(或字段)进行 Url 编码。第二个参数为一个布尔值,指示是否对第一个参数进行字段替换。如果为true,则如果第一个参数为数据库字段,则会把参数1转换为字段内容。配置为false或不配置,会把参数1原样编码返回。默认为False。

3.11     GetUrlParam函数

3.11.1完整语法:#GetUrlParam(”文本”)

3.11.2作用:返回Url中文本指定的参数的值(已解码)。

3.12     GetEncodeUrlParam函数

3.12.1完整语法:#GetEncodeUrlParam(”文本”)

3.12.2作用:返回Url中文本指定的参数的值,此值仍然是经过Url编码的。

3.13     FilterInvalidWord函数

3.13.1完整语法:#FilterInvalidWord(”文本,拆分字符列表,单个拆分项最小长度, 需要返回的拆分项的个数,返回结果是否进行Url编码”)

3.13.2作用:过滤文本中的杂乱字符,并拆分为指定的个数,多个拆分项之间半角分号连接。

3.14     其它扩展自定义函数, 用UserFunctionDelegae 来扩展

4          内置流程控制语句

4.1         说明:本组件支持与其它编程语言意义一致的流程控制语句­­­­­­­­,以实现配置的分支化,以适应多种不同的运行时情况。

4.2         #IF … #ELSE … #ENDIF单分支语句

4.2.1    语法:

#IF(布尔表达式)

……

#ELSE

……

#ENDIF

4.2.2    语法说明:本语句语法规则类似自定义函数语法,关键字前需加 ”#” 以作标记。省略号处可以放置各种配置文本,没有任何配置内容限制。

4.2.3    布尔表达式是一个包含二元运算符的比较表达式,二元运算符限制在“<”、“<=“、“>“、“>=“、“==“和“!=”中的一种,其中“==”表示两侧变量相等,而“!=”表示两侧不相等。
布尔表达式也可以是一个布尔值,即 ”true” 或 ”false” 字符串。

4.2.4    此表达式中可以嵌套自定义函数,甚至字段配置节点。如果包含字段配置节点,则先计算此节点的结果,然后进行表达式计算。

4.2.5    关于布尔表达式的比较规则:运算符两侧的变量默认作为字符串按ASCII进行比较大小,如果两个变量都为数字的话,则优先按照数字进行比较大小。如果希望强制按字符串进行比较,请用半角单引号包含两个变量。比如:’XYZ’>’ABC’

5          关于节点嵌套规则

5.1         自定义宏是单位节点,无法嵌套任何节点。

5.2         字段配置节点可以嵌套“自定义宏”节点和“自定义函数”节点。

5.3         自定义函数节点可以嵌套“自定义宏”节点和“字段配置”节点。

5.4         流程控制语句节点可以嵌套以上所有节点。

5.5         以上所有类型的节点均不允许嵌套本类型的节点。

5.6         “字段配置”节点和“自定义函数”节点虽然可以相互嵌套,但仅限于嵌套一层,不允许反复嵌套。

6          处理顺序
以上所有规则的处理顺序为:自定义宏 à字段配置节点 à自定义函数 à流程控制语句。

非常感谢同事李前期工作和对我的指导和帮助

转载于:https://www.cnblogs.com/ericwen/archive/2008/07/08/TpiSyntaxAnalyzer.html

通过配置XML,使用TpiSyntaxAnalyzer语法分析,快速生成网页相关推荐

  1. 2 snippets vue 修改配置_VSCode 自定义Vue snippets, 快速生成Vue模板

    命令行 Ctrl+Shift+P # 选择 Configure User Snippets # 选择 Vue.json 原始的Vue.json { // Place your snippets for ...

  2. 小游戏/小程序如何快速生成分享海报图

    在应用开发过程中,我们会遇到各种各样的分享场景,例如邀请.拉新.分享内容等.分享链接是 Web 时代常见的分享形式,实现也相对容易.但是现在人们时间大都花在了 APP 上,所以应用之间的分享越来越重要 ...

  3. php lmpl,tjx-cold: 用于根据配置模板,快速生成controller,service,serviceimpl 代码

    用于根据配置模板,快速生成controller,service,serviceimpl 代码(交流群 623169994 ) 为什么要开发这款插件 市面上有很多基于数据库生成代码的工具,但是我自己的工 ...

  4. 工具-eclipse-hibernate关于快速生成*.hbm.xml文件,与bean文件的操作,不使用hibernate tool解决办法之一,主要为了快速开发,写的小工具

    实现思想:就是java对目标表的字符串的处理,以及基础的sql语句 不能使用hibernate tool ,解决办法 为了记录,以后也许还会用的小工具 **工具优点:比手打生成快,能加快hiberna ...

  5. mybais逆向工程快速生成实体和基本xml

    在ssm或者使用mybatis的项目中,如果有大量的表需要建设实体到数据库的表映射关系,在程序中一个个手动创建对象是很费时间的事情,mybatis提供了一个很好用的插件可以帮助我们快速生成基本的实体对 ...

  6. 生成Solr增量索引配置xml

    主要是解决在Solr 配置增量索引的时候,如果数据库做了分表比如分了128张,那在配置Solr的data-config.xml的时候会很浪费时间,刚开始我也用dom4生成过,但总是感觉格式有问题,特别 ...

  7. 如何快速生成一个web.xml 文件

    新建一个webd动态项目,如果在创建的时候忘记勾选创建web.xml文件,那么生成的web项目是没有web.xml的,自己手写的话很麻烦,那么如何快速生成web.xml呢 1.在新建的web项目上右键 ...

  8. VScode如何快速生成【.vue】文件骨架(配置vue.json)

    设置.vue 文件快速生成骨架: 1. 打开vscode,点击对话框左上角文件,依次点击:首选项 -> 配置用户代码片段:如下图 2. 输入框输入vue,选择vue.json:如下图 3.复制下 ...

  9. 将xml文件按照xsl文件样式快速生成html文件的方法

    日志 >  个人日记 转载到我空间 复制本文网址 隐藏签名档 小字体 选用该信纸 上一篇 | 下一篇 | 返回日志列表 设置置顶 | 编辑 | 删除 将xml文件按照xsl文件样式快速生成htm ...

最新文章

  1. Kibana:分析及可视化日志文件
  2. php扩展xdebug安装以及用kcachegrind系统分析
  3. android token过期怎么跳转登录_用sa-token轻松解决网站权限验证
  4. hdu5033 最大仰望角
  5. php根据位置获取经纬度(百度地图)
  6. boost::copy_n相关的测试程序
  7. android窗口速度条,android 改变ViewPager切换页面时的速度
  8. 使用WebDriver遇到的那些坑
  9. 405 宝塔钩子_点击数据库管理,nginx提示出现405 Not Allowed错误,是怎么回事?
  10. MFC消息响应机制及映射机制理解
  11. Linux系统编程19:基础IO之了解Linux中的标准输入和输出以及相关的系统调用接口(如write,read等)
  12. 手机访问电脑文件_手机直接访问电脑文件,不用数据线,方便快速
  13. hibernate mysql语句_打印hibernate的SQL语句的几种办法
  14. WebLogic简单的备份和恢复
  15. 格式工厂 wav 比特率_IQmango Converter下载-IQmango Converter(音视频格式转换工具)v3.4.6免费版...
  16. 信息学奥赛一本通1032
  17. HTML-----超链接与表格Lable(详细可看)
  18. u盘 固态硬盘 读写速度测试软件,超级U盘/SSD读写可靠性(扩容)测试工具urwtest v1.8...
  19. Standford Moss。图形用户页面接口,代码查重
  20. [官方文档翻译:kind]HOME

热门文章

  1. android导航使用教程,android BottomNavigationView的简单使用教程
  2. aso优化师是什么_出海产品如何优化ASO?Google Play ASO优化入门指南
  3. 分析SpinnerActivityTest中有关控件操作以及UI线程问题
  4. 一文带你了解 JVM 的垃圾回收机制
  5. Vue CLI 3开发中试用UIkit 3组件库
  6. BAT脚本一键更新提交代码到线上
  7. 解读2015之大数据篇:大数据的黄金时代
  8. Java 开源博客 Solo 1.6.0 发布 - 新后台
  9. Java Jersey2使用总结
  10. 三月活动之“桃花朵朵开 求爱上上签”