`
isiqi
  • 浏览: 16558395 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

阅读更多
将下面的四个文件存在同一级目录下,再在同目录下建立一个文件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 if
else
if index>1 then
str_tmp=left(alltmp,index-1)
txt1=txt1+str_tmp 'index<>1,说明前面有文本。
del_tag=len(left(alltmp,index-1)) '把"<"前面的属于文本的添加到新txt1大字符串中去。
end if
if index=0 then '当再也找不到<时(到了末尾),把剩下的字符串全部加到txt1里,结束循环。
txt1=txt1+alltmp
del_tag=len(alltmp)
end if
end if

'把处理完的部分从原字符串中减掉
'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>

<br><a 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 if

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 IF
End If
End If

'------------------对属性数组,根据上面打的不同标志来调用不同函数进行处理--------------
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 if
'msgbox "tag_self"+tag_self
'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 if
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值的多个函数---------【保留】----结束
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
%>

来源:http://webuc.net/dotey/articles/595.aspx
分享到:
评论

相关推荐

    XML网页制作彻底研究

    2. **CSS和XSLT**:使用CSS(Cascading Style Sheets)进行样式控制,而XSLT(XSL Transformations)则用于转换XML数据,将数据格式化为适合浏览器显示的HTML。 XML还可以与服务器端技术如ASP(Active Server Pages...

    net学习笔记及其他代码应用

    答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的. [Page] 26.根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写: namespace test { public ...

    法国金融程序员技术详细简历样本AUSY

    11. **配置管理**:CVS、ClearCase、PVCS、Visual SourceSafe、Endevor等工具的提及,意味着具备源代码管理和版本控制的能力。 12. **应用程序和系统**:SAP、PeopleSoft、Summit和Sophis等软件的提及,表示熟悉...

    XML高级编程pdf

    9.6 XSL转换与DOM转换的比较 9.7 小结 第10章 XML和数据库 10.1 存储XML 10.1.1 持续性问题 10.1.2 文档管理 10.1.3 XML存储和数据库 10.1.4 结论 10.2 XML的交换 10.2.1 数据标准 10.2.2 查询标准 ...

    XML高级编程 (Extensible Markup Language)

    9.6 XSL转换与DOM转换的比较 9.7 小结 第10章 XML和数据库 10.1 存储XML 10.1.1 持续性问题 10.1.2 文档管理 10.1.3 XML存储和数据库 10.1.4 结论 10.2 XML的交换 10.2.1 数据标准 10.2.2 查询标准 ...

    XML 高级编程(高清版)

    9.6 XSL转换与DOM转换的比较 9.7 小结 第10章 XML和数据库 10.1 存储XML 10.1.1 持续性问题 10.1.2 文档管理 10.1.3 XML存储和数据库 10.1.4 结论 10.2 XML的交换 10.2.1 数据标准 10.2.2 查询标准 ...

    系统分析师考试复习资料

    - **XML作为数据源**:可以将XML文档作为JSP页面的数据源,使用XSLT转换XML数据,然后在JSP页面上展示。 - **使用JSP处理XML**:通过JSP内置的XML处理API(如JAXP)来读取和操作XML文档。 - **集成的优势**:这种...

    2021-2022计算机二级等级考试试题及答案No.2078.docx

    - **解析**:编译程序(编译器)负责将高级语言源代码转换成目标代码或机器语言代码。 ### 23. Integer类型常量 - **知识点**:Visual Basic中的Integer类型常量。 - **题目示例**:123%是Integer类型常量。 - **...

Global site tag (gtag.js) - Google Analytics