注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

汇总技巧

你快乐我快乐.... 汇集各类技巧,传播技巧,让我们共同熟练运用技巧..

 
 
 

日志

 
 

将html源代码规范化,转换成XSL代码的asp工具  

2011-06-04 19:21:13|  分类: ◆ASP技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

   将下面的四个文件存在同一级目录下,再在同目录下建立一个文件txt.txt。当要
处理html代码时,先将源代码拷入txt.txt,再进入index_transform.asp,
即可看到处理完的代码。
写这个东西的本意是因为:经常要对美工用切图软件生成的网页文件转换成xsl,
很头疼要花大量的时间去改写不规范的html代码。
这个东西对全文所有的html代码进行改动:
1.把所有标记都变成小写;
2.把标签的属性值都加上双引号;
3.把单端标签hr、img……、input……等,改成hr/……;
4.把单独属性selected变成:selected="selected";
功能不完善之处:对html代码中,属性值内包含空格的情况不能正常处理;
对script、style标签里的不能正常处理。
因为是以空格为标志将标签里的各个属性值split成的数组,所以对属性值中
包含空格的还没做进一步处理。
OK,耽误大家时间了,看看这个东西能派上用场吗?
圣诞快乐~! :)
==================================================
==================================================
'文件1:transform.asp◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎
%
'*****************************************
'Author:小乙
'时间:2000.12.20
'功能:初步完成对要被转换成XSL文件的:普通html代码语法规范化的功能
'运行环境:可运行asp的机子。在同级目录下把要处理的html代码copy到
'txt.txt文件里。
'***************************************
'================================================================================================
''''''''''''''''【对全文所有html源代码进行语法规范化】''''''''''''''
'在这个函数里,调用了另外一个主要函数alone_tag,来处理从中摘出来的单个标签。
Function transform(txt)
dim alltmp  '定义此字符串变量,随着被处理的大字符串减少而减短——只保留未处理的字符串部分。
alltmp=txt
alltmp=replace(alltmp," "," ")    'nbsp_tmp是替换掉文本中的字符实体#nbsp;
'□■■■■■——进入全文的处理htm源代码的大处理循环——■■■■■□
do while trim(alltmp)""
'msgbox alltmp
index=0
index=InStr(1,alltmp,"",1)
'根据index的值,判断""前面是否有文本?有:加到txt1;无:进行标签处理(index=1)——即进入标签处理分支
if index=1 then
index_right=InStr(1,alltmp,"",1)
tag=left(alltmp,index_right)      '取出alltmp临时串中""前面的字符串
  '对到这里的标签,判断如果标签不是后端标签,就调用处理标签大函数alone_tag
  if mid(tag,2,1)"/" then
  tag1=alone_tag(tag)
  'tag1=tag+",,,,,|"
  txt1=txt1+tag1
  del_tag=len(tag)
  else      '否则对其它标签,就转为小写后,简单的加在txt1后面
  txt1=txt1+LCase(tag)
  del_tag=len(tag)
  end i
else
  if index1 then
  str_tmp=left(alltmp,index-1)
  txt1=txt1+str_tmp        'index1,说明前面有文本。
  del_tag=len(left(alltmp,index-1))  '把""前面的属于文本的添加到新txt1大字符串中去。
  end i
  if index=0 then          '当再也找不到时(到了末尾),把剩下的字符串全部加到txt1里,结束循环。
  txt1=txt1+alltmp
  del_tag=len(alltmp)
  end i
end i
'把处理完的部分从原字符串中减掉
'response.write "alltmp="+alltmp
alltmp=right(alltmp,len(alltmp)-del_tag)  '(如果标签长大于等于2个字符)这里有问题!12.14,下次再作!!
loop
'□■■■■■——离开全文的处理htm源代码的大处理循环——■■■■■□
'transform=txt1
txt1=replace(txt1," ="""" "," ")  '【这句是对付=""漏网之鱼  2000.12.15
txt1=replace(txt1," ","")    '【这句是对付   2000.12.19
txt1=replace(txt1,"tbody","")  '【这句是对付tbody  2000.12.19
transform=replace(txt1,"/tbody","")  '【这句是对付/tbody  2000.12.19
End Function
''''''''''''''''【对全文所有html源代码进行语法规范化,结束】''''''''''''
%
==================================================
==================================================
'文件2:index_transform.asp◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎
@ Language="VBScript" %
!-- #include file="transform.asp" --
!-- #include file="alone_tag.asp" --
%
'-------------------------------------本部分得到全文源代码,开始------------------------------------
dim txt  '源文件中的文本
dim txt1  '经过html语法规范化后的文件字符串。
dim tmpreadline  '=thisfile.readline
txt="":txt1="":tmpReadAll=""
'取得源文件名称,及所在路径-------------
sourcefile="txt.txt"
sourcefile=Request.form("txtname")
'--------------------------新增部分,获得上传文本文件的内容------------2000.12.15
'txt=request.form("filecontent")
'if len(txt)"" then
'response.write "---------------"
'end if
'response.end
'--------------------------新增部分结束------------2000.12.15
'-----------------------------------------------------【正式开始操作文件】----------------------
whichfile=server.mappath("txt.txt")
'whichfile=server.mappath(sourcefile)
Set fs = CreateObject("Scripting.FileSystemObject")
Set thisfile = fs.OpenTextFile(whichfile, 1, False)
counter=0
  tmpReadAll=thisfile.readall          'ReadAll是读取全部文件内容。
  txt=tmpReadAll
  txt1=transform(cstr(tmpReadAll))
  txt=server.htmlencode(txt)+"  【文件内容到此结束】"
''''''''''''''''''''''''''''
              '如果要看打印出来长字符串的效果,请取消上面这行注释。
'-------------------------------------本部分得到全文源代码,结束------------------------------------
%
%'''''''''''''''【这里正式html页面开始】'''''''''''''''''''''%
html
head
title倒数第二版/title
meta http-equiv="Content-Type" content="text/html; charset=gb2312"
/head
body bgcolor="#BFA49a"
form method="post" action="index_transform.asp" name="form1"
table border="1" cellspacing="0" cellpadding="5" align="center" bgcolor="#99CCCC" bordercolor="#330066"
  tr
  td
  input type="text" name="txtname" value="txt.txt"
    
  input type="file" name="filecontent"
   
  input type="submit" name="Submit" value="提交"
  a href="#pagedown"到下面/a
  /td
  /tr
/table
/form br
!-------------------页面表单2开始(form2)---------------------
form method="post" action="trans2.asp" name="form2" enctype="multipart/form-data"
table width="753" border="1" cellspacing="0" cellpadding="5" align="center" bgcolor="#99CCCC" bordercolor="#330066"
  tr bgcolor="#98AFE7" bordercolor="#FFCC99"
  td bordercolor="#FFFFFF"原文:/td
  td bordercolor="#FFFFFF"处理后:/td
  /tr
  tr
  td
  textarea name="txt" cols="50" rows="25" onFocus="this.select()" onclick="this.focus()"
%=txt%
/textarea
  /td
  td
  %'''''''''''''''''''''''''''''''''''%
  textarea name="txt" cols="50" rows="25" onFocus="this.select()" onclick="this.focus()"
%=txt1%
/textarea
  /td
  /tr
/table
div id="Layer1" style="position:absolute; width:68px; height:35px; z-index:1; left: 349px; top: 411px; background-color: #E7E7E9; layer-background-color: #E7E7E9; border: 1px none #000000"
  div align="center"
  input type="submit" name="Submit2" value="提交"
  INPUT TYPE=button NAME="view" VALUE="看源码" OnClick='window.location="view-source:" +window.location.href'
  /div
/div
/form
p /p
bra name="pagedown"
hr size="1" align="center" width="90%" color="#88ff99"
!-------以下是处理完的源代码-----------
%=txt1%
!-------处理完的源代码到此为止-------
/body
/html
%'释放资源
Erase strtag1
Erase strtag2
Erase strtag3
thisfile.Close
set thisfile=nothing
set fs=nothing
%
==================================================
==================================================
'文件3:alone_tag.asp◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎
!-- #include file="func_flag.asp" --
%
'tag="hr bgcolor=""#ccFFFF"" size=4568481,dfafd selected"
'----------------------------进入这里时应该已经得到一个完整的标签--------------------------------
'--------在此建立了一个大函数用来处理一个完整的标签里的属性值。一直到页面尾部为止。
function alone_tag(tag)
dim tag1    '定义处理完以后的标签,并在本函数末尾,将此值返还给alone_tag。
tag=LCase(tag)  '将标签命名为tag,并且为了美观,把所有字符串都改写成小写形式
'---------到此先准备好标签的自身,以备后面拼回标签的时候使用(减一是因为后面拼属性时把空格加上了)
dim tmpattri  '此变量是临时字符串,包含一个标签中的所有属性值,利用它来求属性数组:attribute
index=InStr(1,tag," ",1)
tmpattri=right(tag,len(tag)-index)      '除去左侧标签
if len(tmpattri)1 then
tmpattri=trim(left(tmpattri,len(tmpattri)-1))  '除去右侧"",并去除两端空格(如果标签长大于等于2个字符)
end i
tmpattri=replace(tmpattri,chr(13)," ")  '对源码中,一个标签不在一行里的情况,尚等待另行考虑处理。
tmpattri=replace(tmpattri,chr(10)," ")
tmpattri=replace(tmpattri,chr(10)chr(13)," ")
tmpattri=replace(tmpattri,""," ")  '【这两句是对付当属性串里有多个空格的时候,
tmpattri=replace(tmpattri,""," ")  '【替换成一个空格,不过只能处理不超过16个空格的情况。
tmpattri=replace(tmpattri,""," ")
tmpattri=replace(tmpattri,""," ")
tmpattri=replace(tmpattri,""," ")
tmpattri=replace(tmpattri,""," ")
tmpattri=replace(tmpattri,""," ")
attribute=Split(tmpattri, " ", -1, 1)  '新定义一个数组,是专为装载属性值而设的。Dim attribute
'msgbox "这里得到准备拆分属性数组的长字符串:"+tmpattri
'--------------------到这里已经得到一个关于属性值的数组:attribute-------------------------------
'--------『这个循环是处理上面处理完毕的属性值字符数组(attribute)的』-------------------
'flag=0:说明单个属性有等于号,且有双引号——语法正常,后面对此标志忽略。  (例:width="325")
'flag=1:说明单个属性有等于号,且没有双引号——需要处理,对语法规范化  (例:width=325)
'flag=2:说明单个属性没有等于号(例:selected)
'flag=3:说明是单端标签,(例:hr width="80%" size="1")此语句在前面设标志,并进行处理
For count=0 to UBound(attribute, 1)  '一个元素的属性不多.
  If InStr(1,attribute(count),"=",1)=0 Then
  flag=2          '单个属性串中没找到等于号。(例:selected)
  Else
  IF InStr(1,attribute(count),"""",1)=0 Then
  flag=1          '单个属性串中没找到等于号。(例:width=325)
  Else
  flag=0          '单个属性串找到了等于号。(例:width="325")
    IF InStr(1,attribute(count),"""",1)0 Then
    'attribute(count)=attribute(count)+attribute(count+1)
    'attribute(count+1)=""  '这两句是说,把下一个属性串的赋给它,把下一个属性串置为零。
    flag=4  '单个属性串找到了等于号,并且包含分号。(例:content="text/html; charset=gb2312")
    End I
  End I
  End I
'------------------对属性数组,根据上面打的不同标志来调用不同函数进行处理--------------
Select case flag
  case 0 attribute(count)=attribute(count)
  case 1 attribute(count)=func_flag1(attribute(count))  '调用函数func_flag1处理。(例:width=325)
  case 2 attribute(count)=func_flag2(attribute(count))  '调用函数func_flag2处理。(例:selected)
  case 3 attribute(count)=func_flag3(attribute(count))  '调用函数func_flag3处理单端标签(例:img…)
  case 4 attribute(count)=(attribute(count))      '另行处理属性串之间包含分号、空格的情况
End Select
Next
count=0
for count=0 to UBound(attribute, 1)
attribute_tmp=attribute_tmp+" "+attribute(count)  '属性值之间要有空格
next
'----------到这里已经把各个符合属性值规范的属性拼成一个串attribute_tmp,下面进行拼标签------
index=InStr(1,tag," ",1)
  if InStr(1,tag," ",1)=0 and len(tag)"" then  '当空格没找到(意味着是空属性值标签),且没有到末尾时。
  tag1=Replace(tag,""," ")    '在此类标签(例hr)后尾加上一个空格
  else
  tag_self=left(tag,index-1)
  '拼标签与属性串。
  tag1=tag_self+attribute_tmp+""
  end i
'msgbox "tag_self"+tag_sel
'msgbox "(要输出的标签串)tag1ssssssssssss:"+tag1
'-----------------到这里已经得到一个属性值规范的标签,但要开始对单端标签进行处理------------
'----替换单端标签--------
'count=0
for count=0 to UBound(strtag3,1)
  if InStr(1,tag1,strtag3(count),1)0 then  '这里利用到前面已切分好的属性标签
  tag1=func_flag3(tag1)        '对付单端标签——flag=3(例:img…)
  end i
next
'-----------------到这里已经得到一个完全语法规范化的标签。单端标签处理完毕------------
alone_tag=tag1
end function
'SCRIPT LANGUAGE="javaScript"
'!--
'tag='%=alone_tag(tag)% '
'alert (tag)
'//--
'/SCRIPT
%
==================================================
==================================================
'文件4:func_flag.asp◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎
%
strtag_source1="html ,body ,table ,td ,tr ,option ,font ,div ,span ,h1 ,h2 ,form "
strtag1 = Split(strtag_source1, ",", -1, 1)
strattri_source2="selected,checked,norwap,readonly,noshade"    '单独属性
strtag2 = Split(strattri_source2, ",", -1, 1)
strtag_source3="input ,img ,hr ,br ,meta"  '单端标签
strtag3 = Split(strtag_source3, ",", -1, 1)
'''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''
'-------------------以下是处理flag值的多个函数---------【保留】----开始
function func_flag1(tmp)'处理单个属性:(例:width=325)
index=InStr(1,tmp,"=",1)
z1=left(tmp,index)
z2=""""
z3=mid(tmp,index+1,len(tmp)-len(z1))
func_flag1=z1+z2+z3+z2
end function
function func_flag2(tmp)'(例:selected)
func_flag2=tmp+"="+""""+tmp+""""
end function
function func_flag3(tmp)'处理单端标签(例:img…)
func_flag3=replace(cstr(tmp),"","/")
end function
'-------------------以上是处理flag值的多个函数---------【保留】----结束
'''''''''''''''''''''''''''''''''''''''''''''
%
来源:aspx">http://webuc.net/dotey/articles/595.aspx
target=_blank>http://webuc.net/dotey/articles/595.aspx">http://webuc.net/dotey/articles/595.aspx

  评论这张
 
阅读(71)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017