`
guohf
  • 浏览: 408929 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

系统标签解析原理

阅读更多

我们先看一个最简单的系统标签:{$Copyright},这个标签的作用是显示网站的版权信息,这个标签是如何解析的呢? 我们可以查找一下源代码(这里可以借助一些有查找功能的工具,比如说用DreavWeaver),可以发现在Include文件夹里面的PowerEasy.Common.Front.asp文件里面有这样一行代码(2657行左右): strHtml = PE_Replace(strHtml, "{$Copyright}", Copyright) 这行代码的作用就是将查找strHtml字符串的内容,然后将里面的{$Copyright}替换成Copyright这个变量的内容。 可能这里有人会有这样的疑问,strHtml是什么内容?Copyright这个变量的内容又是什么?可以这样理解,strHtml是一个字符串,字符串里面存放的是模板代码,Copyright是一个全站变量,他的内容对应网站的版权信息。 同理,我们可以增加一个最简单的系统标签,比如我们再这行代码下面加入: strHtml = PE_Replace(strHtml, "{$MyName}", "路人甲") 那么当你在模板里面插入{$MyName}这个标签时,解析的时候就可以解析成路人甲了。 接下来我们看看{$ShowLogo}这个标签是如何解析的,往下查我们可以看到2661行左右有这样的代码: If InStr(strHtml, "{$ShowLogo}") > 0 Then strHtml = Replace(strHtml, "{$ShowLogo}", GetLogo(180, 60)) 这里是先查找是否存在$ShowLogo}这个标签,存在的话将这个标签的内容替换成GetLogo(180, 60)这个函数的内容, GetLogo(180, 60)函数是定义在哪里的?我们同样可以查找一下,在这个文件的582行左右就可以找到这个函数的定义。 到这里,可能有人会有这样的疑问,如果我们要解析的系统标签是带参数的,那系统是如何解析的? 下面我们来看一下{$ShowLogo(width,height)}这个标签是如何解析的。 带参数的系统标签跟不带参数的系统标签解析方法是不同的,我们可以看一下以下一段代码 '替换Logo regEx.Pattern = "\{\$ShowLogo\((.*?)\)\}" Set Matches = regEx.Execute(strHtml) For Each Match In Matches arrTemp = Split(Match.SubMatches(0), ",") If UBound(arrTemp) <> 1 Then strLogo = "函数式标签:{$ShowLogo(参数列表)}的参数个数不对。请检查模板中的此标签。" Else strLogo = GetLogo(arrTemp(0), arrTemp(1)) End If strHtml = Replace(strHtml, Match.Value, strLogo) 这段代码就是查找系统函数标签的一个简单例子,我们逐句来解读一下: regEx.Pattern = "\{\$ShowLogo\((.*?)\)\}" 这个是一个正则表达式,由于在正则表达式里面{,$,(,),}都是特殊符号,要把他转换成普通字符处理,前面需要加上“\”,(.*?)表示匹配除换行符之外的字符,也就是说程序会查找{$ShowLogo(****)}这样的内容(***代表任何除换行符外的任何字符),如果有找到这个内容,那么程序就把它当成一个系统函数标签来处理。 Set Matches = regEx.Execute(strHtml) 这里执行模式匹配,也就是在查找模板中是否存在要查找的函数标签。 For Each Match In Matches 这里对匹配的结果进行处理 arrTemp = Split(Match.SubMatches(0), ",") Split函数的作用是分隔字符串,这段代码的作用就是对函数进行处理,用逗号来分隔,将分隔出来的存放在arrTemp数组中,也就是第一个参数存放在arrTemp(0)中,第二个参数存放在arrTemp(1)中,这样依次存放。 If UBound(arrTemp) <> 1 Then strLogo = "函数式标签:{$ShowLogo(参数列表)}的参数个数不对。请检查模板中的此标签。" Else strLogo = GetLogo(arrTemp(0), arrTemp(1)) End If If UBound(arrTemp) <> 1 Then这里是判断arrTemp这个数组有多少个数值,因为我们是从0开始计算的,第一个参数存放在arrTemp(0)中,所以这里的If UBound(arrTemp) <> 1 Then其实就是判断参数是不是2个(注意不是1个),不是的话就输出 strLogo = "函数式标签:{$ShowLogo(参数列表)}的参数个数不对。请检查模板中的此标签。" 如果参数是2个的话,就将这两个参数传递给GetLogo()这个函数,GetLogo()这个函数是带返回值的,strLogo = GetLogo(arrTemp(0), arrTemp(1))就是用strLogo这个变量来记录这个函数的执行结果。 strHtml = Replace(strHtml, Match.Value, strLogo) 这个代码就是用我们得到的结果来替换正则表达数找到的函数标签了,到此,这个系统标签的解析就算结束了。

分享到:
评论

相关推荐

    模板引擎(标签解析)示例源码

    模板引擎是CMS系统必备的核心架构之一,它的功能可以做得很强大,如动易的模板引擎,标签库也可以做得很强大,很完善,这里只是简单的对模板引擎原理作演示。此源码包含功能强大的标签解析类:GetHtml.cs 此源码只...

    LINUX内核探秘:深入解析文件系统和设备驱动

    带有详细的标签,深刻分析linux文件系统的原理,代码解读,原理介绍, 带你走进linux的文件系统的世界

    RFID标签整理机原理设计和Matlab仿真.pdf

    RFID标签整理机原理设计和Matlab仿真.pdf

    直流风机风力摆控制系统(原理图+PCB+程序源码+论文)基于瑞萨100LGA单片机

    内容涵盖了系统的整体架构、各模块的功能描述、原理图设计、PCB布局、程序源码以及相关的理论分析和实验结果。系统主要由瑞萨单片机控制模块、6050三轴陀螺仪加速度模块、直流风机及其驱动模块、显示模块、键盘模块...

    新一代EAS系统的研究与实现

    本文的主要内容是研究和实现基于58KHz发射频率磁性材料标签的EAS系 统"围绕这一目的,论文首先介绍EAS系统的起源,本论文的研究...原理,详细的系统实现和完整系统电路分析"最后总结本论文,并对下一步工作 做进一步展望

    数据库系统原理课程设计,基于Java实现的超市会员管理系统源码+数据库+课程设计报告,含图形界面

    数据库系统原理课程设计,基于Java实现的超市会员管理系统源码+数据库+课程设计报告,含图形界面。 在系统设计过程中充分了解了 JDBC 的使用和代码的构建。包括但不限于,驱动资源寻找,版本确认,驱动导入,数据库...

    基于MSP430和RFID的小型化智能农业监控系统设计WORD论文文档+硬件原理图+软件源码.rar

    在温室环境中各处安放有源标签,通过温湿度、CO2浓度、光照强度传感器对温室内的环境信息进行采集,系统控制方面主要由上位机设定门限值,当节点采集到的信息高于或低于门限值时,将数据传给读卡器,经过读卡器分析...

    PostgreSQL实现一个通用标签系统

    这篇文章主要通过分析标签系统的原理,并用PostgreSQL来实现一个能够为多种资源打标签的标签系统。 1. 单一资源标签系统 先从单一资源开始,所谓单一资源便是,我们只给一种数据资源打标签。假设我们需要给博客...

    深入解析Windows操作系统 第6版 上册(高清带书签).zip

    本书是著名的操作系统内核专家Mark Russinovich和David Solomon、Allen Ionescu撰写的关于Windows操作系统原理的全新版著作, 全面深入地阐述了Windows操作系统的整体结构及内部工作细节,带完整标签,可以方便查看

    基于雷达截面差值的标签通信误码率分析和测量.pdf

    基于射频识别技术通信原理和反向散射理论,导出无源标签反向散射信号在⋯0’和“1”状态下的雷达散射截面差值与反向散射链路通信误码率的关系,提出一种适应于射频识别通信链路的误码率分析、测试方法。使用研发的...

    纯电动汽车悬架系统设计与平顺性分析.pdf

    纯电动汽车悬架系统设计的理论基础是机械动力学和汽车悬架系统的设计原理。基于ADAMS软件的悬架系统设计方法,可以模拟悬架系统的动力学行为,优化悬架系统的设计参数,提高汽车的行驶安全性和舒适性。 本文的结论...

    基于新能源电动汽车换电站及配电网原理分析.pdf

    "基于新能源电动汽车换电站及配电网原理分析" 本文主要探讨了基于新能源电动汽车换电站及配电网原理分析,旨在解决电动汽车换电站的相关问题。文章首先介绍了电动汽车换电站的类型和结构,包括配电变压器、充电机、...

    基于RFID技术的电子标签读写系统的设计与实现 (2008年)

    简要介绍了RFID技术的概念、分类、优势、典型应用,以及RFID的系统组成和工作原理;对RFID系统的读写器和非接触式IC卡进行了详细描述。在此基础上提出了一种基于RFID技术的电子标签读写系统,并对系统的软硬件设计与...

    井盖管理系统方案.doc

    " " " " " " " " " 目录 目录 2 1、概述 1 1.1 项目背景 1 1.2 需求分析 2 1.3 LORA技术介绍 3 2、系统总体设计 6 2.1 系统描述 6 2.2 系统原理及架构 7 2.3 系统特点 8 2.4 系统对比 9 2.5 系统设计原则 10 3、...

    论文研究-射频识别系统中的防碰撞算法研究.pdf

    在RFID系统中,为解决多个标签同时与阅读器交换数据所引起的碰撞问题,必须采用一定的防碰撞算法,标签防碰撞技术是RFID系统中的关键技术。详细分析了典型的二进制及动态二进制防碰撞算法原理,并在此基础上提出了一...

    无人机离散系统模型预测控制

    内容涵盖了离散系统MPC的基本原理、算法实现及其在无人机导航与控制中的应用。通过案例分析,展示了MPC如何在保证无人机稳定性的同时,提高其导航精度和机动性。适合无人机开发者、控制工程师和对航空控制技术感兴趣...

    基于spark及用户行为标签的日志大数据分析系统.zip

    通过学习Spring Boot,我了解了其核心思想和基本原理,以及如何构建RESTful Web服务、使用数据库、进行事务管理等。我学会了使用Spring Boot快速搭建Java Web应用程序,并且能够运用Spring Boot的特性来简化开发流程...

Global site tag (gtag.js) - Google Analytics