Welcome![Sign In][Sign Up]
Location:
Search - h1

Search list

[Internet-Network用Java编写HTML文件分析程序

Description:

Java编写HTML文件分析程序

 一、概述

    

    Web服务器的核心是对Html文件中的各标记(Tag)作出正确的分析,一种编程语言的解释程序也是对源文件中的保留字进行分析再做解释的。实际应用中,我们也经常会碰到需要对某一特定类型文件进行要害字分析的情况,比如,需要将某个HTML文件下载并同时下载与之相关的.gif.class等文件,此时就要求对HTML文件中的标记进行分离,找出所需的文件名及目录。在Java出现以前,类似工作需要对文件中的每个字符进行分析,从中找出所需部分,不仅编程量大,且易出错。笔者在近期的项目中利用Java的输入流类StreamTokenizer进行HTML文件的分析,效果较好。在此,我们要实现从已知的Web页面下载HTML文件,对其进行分析后,下载该页面中包含的HTML文件(假如在Frame中)、图像文件和ClassJava Applet)文件。

    

    二、StreamTokenizer

    

    StreamTokenizer即令牌化输入流的作用是将一个输入流中变成令牌流。令牌流中的令牌实体有三类:单词(即多字符令牌)、单字符令牌和空白(包括JavaC/C++中的说明语句)。

    

    StreamTokenizer类的构造器为: StreamTokenizer(InputStream in)

    

    该类有一些公有实例变量:ttypesvalnval ,分别表示令牌类型、当前字符串值和当前数字值。当我们需要取得令牌(即HTML中的标记)之间的字符时,应访问变量sval。而读向下一个令牌的方法是调用nextToken()。方法nextToken()的返回值是int型,共有四种可能的返回:

    

    StreamTokenizer.TT_NUMBER: 表示读到的令牌是数字,数字的值是double型,可以从实例变量nval中读取。

    

    StreamTokenizer.TT_Word: 表示读到的令牌是非数字的单词(其他字符也在其中),单词可以从实例变量sval中读取。

    

    StreamTokenizer.TT_EOL: 表示读到的令牌是行结束符。

    

    假如已读到流的尽头,则nextToken()返回TT_EOF

    

    开始调用nextToken()之前,要设置输入流的语法表,以便使分析器辨识不同的字符。WhitespaceChars(int low, int hi)方法定义没有意义的字符的范围。WordChars(int low, int hi)方法定义构造单词的字符范围。

    

    三、程序实现

    

    1HtmlTokenizer类的实现

    

    对某个令牌流进行分析之前,首先应对该令牌流的语法表进行设置,在本例中,即是让程序分出哪个单词是HTML的标记。下面给出针对我们需要的HTML标记的令牌流类定义,它是StreamTokenizer的子类:

    

    

    import java.io.*;

    import java.lang.String;

    class HtmlTokenizer extends

    StreamTokenizer {

    //定义各标记,这里的标记仅是本例中必须的,

    可根据需要自行扩充

     static int HTML_TEXT=-1;

     static int HTML_UNKNOWN=-2;

     static int HTML_EOF=-3;

     static int HTML_IMAGE=-4;

     static int HTML_FRAME=-5;

     static int HTML_BACKGROUND=-6;

     static int HTML_APPLET=-7;

    

    boolean outsideTag=true; //判定是否在标记之中

    

     //构造器,定义该令牌流的语法表。

     public HtmlTokenizer(BufferedReader r) {

    super(r);

    this.resetSyntax(); //重置语法表

    this.wordChars(0,255); //令牌范围为全部字符

    this.ordinaryChar('< '); //HTML标记两边的分割符

    this.ordinaryChar('>');

     } //end of constrUCtor

    

     public int nextHtml(){

    int token; //令牌

    try{

    switch(token=this.nextToken()){

    case StreamTokenizer.TT_EOF:

    //假如已读到流的尽头,则返回TT_EOF

    return HTML_EOF;

    case '< ': //进入标记字段

    outsideTag=false;

    return nextHtml();

    case '>': //出标记字段

    outsideTag=true;

    return nextHtml();

    case StreamTokenizer.TT_WORD:

    //若当前令牌为单词,判定是哪个标记

    if (allWhite(sval))

     return nextHtml(); //过滤其中空格

    else if(sval.toUpperCase().indexOf("FRAME")

    !=-1 && !outsideTag) //标记FRAME

     return HTML_FRAME;

    else if(sval.toUpperCase().indexOf("IMG")

    !=-1 && !outsideTag) //标记IMG

     return HTML_IMAGE;

    else if(sval.toUpperCase().indexOf("BACKGROUND")

    !=-1 && !outsideTag) //标记BACKGROUND

     return HTML_BACKGROUND;

    else if(sval.toUpperCase().indexOf("APPLET")

    !=-1 && !outsideTag) //标记APPLET

     return HTML_APPLET;

    default:

    System.out.println ("Unknown tag: "+token);

    return HTML_UNKNOWN;

     } //end of case

    }catch(IOException e){

    System.out.println("Error:"+e.getMessage());}

    return HTML_UNKNOWN;

     } //end of nextHtml

    

    protected boolean allWhite(String s){//过滤所有空格

    //实现略

     }// end of allWhite

    

    } //end of class

    

    以上方法在近期项目中测试通过,操作系统为Windows NT4,编程工具使用Inprise Jbuilder3


Platform: | Size: 1066 | Author: tiberxu | Hits:

[OS programH1

Description: 键盘输入程序 可以键盘输入 设计qq程序 好东东来的 真的-keyboarding procedures keyboard design process qq good to really Wanton
Platform: | Size: 4532 | Author: MAN | Hits:

[CSharprailk

Description: 最优车皮排序问题 .问题描述: 在一个列车调度站中,k 条轨道连接到k 条侧轨处,形成k 个铁路转轨栈,从左到右依 次记为H1,H2,…,Hk 如下图所示。其中左边轨道为车皮入口(记为H0),右边轨道为出 口(记为Hk+1),编号为a1, a2,.,an 的n 个车皮从入口依次进入转轨栈,由调度室安排车 皮进出栈次序,并对车皮按其出栈次序重新排序为1,2,…,n。 调度室在安排车皮进出栈次序时,遵循以下规则: (1) 车皮入口H0 处的车皮可以进入转轨栈H1,H2,…,Hk 之一,或直接进入车 皮出口Hk+1 。 (2) 转轨栈H1,H2,…,Hk 处的车皮可以进入车皮出口Hk+1 。 .编程任务: 给定正整数n,和n 个车皮的初始编号a1, a2,.,an ,编程计算最少需要多少个转轨栈 才能按照规则(1)和(2)调度车皮,使车皮在车皮出口按照1,2,…,n 的顺序输出。 .数据输入: 由文件input.txt 给出输入数据。第1 行有1 个正整数n,表示有n 个车皮。第2 行是n 个车皮的初始编号a1, a2,.,an 。-wagon optimal scheduling problem. Problem description : In a train station, k, k track connected to the side of the tracks, forming k stack rail transition from left to right followed credited to H1, H2, ..., Hk as in the figure below. Which left orbit for imported cars (credited to H0), the right track for exports (credited as a Hk), the No. a1, a2,. , An n-wagon from the entrance into the transition stack followed by the dispatch room arrangements wagon Stack access priorities, as well as cars stack up according to the order reordering of 1,2, ..., n. The dispatch room in arranging access stack wagon order, to abide by the following rules : (1) H0 wagon entrance of cars can enter the transition stack H1, H2, ..., Hk, or directly into a wagon export Hk. (2) Transition stack H1, H2, ..., H
Platform: | Size: 30200 | Author: 无翼 | Hits:

[CSharprailqk

Description: 最优平行轨道车皮排序问题 .问题描述: 在一个列车调度站中,k 条轨道平行连接到1 条侧轨处,形成1 条主轨道和k-1 条辅助 调度轨道。主轨道记为Hk,辅助轨道从下到上依次记为H1,H2,…,Hk-1 如下图所示。其 中主轨道左边为车皮入口(记为H0),主轨道右边为出口(仍记为Hk)。编号为a1, a2,L,an 的n 个车皮从入口依次进入主轨道,由调度室安排车皮进出轨次序,并对车皮按其出轨次序 重新排序为1,2,…,n。 调度室在安排车皮进出轨次序时,遵循以下规则: (1) 车皮入口H0 处的车皮可以进入辅助轨道H1,H2,…,Hk-1 之一,或直接进 入车皮出口Hk。 (2) 辅助轨道H1,H2,…,Hk-1 处的车皮可以进入车皮出口Hk。 .编程任务: 给定正整数n,和n 个车皮的初始编号a1, a2,L,an ,编程计算最少需要多少个平行轨 道才能按照规则(1)和(2)调度车皮,使车皮在车皮出口按照1,2,…,n 的顺序输出。 .数据输入: 由文件input.txt 给出输入数据。第1 行有1 个正整数n,表示有n 个车皮。第2 行是n 个车皮的初始编号a1, a2,L,an 。 .结果输出: 将计算出的最少平行轨道数输出到文件output.txt 。-optimal parallel tracks wagon scheduling problem. Problem description : In a train station, k parallel track connected to a side track, the formation of a main track and k-assisted dispatching an orbit. The main track is recorded as Hk, auxiliary track from the next turn of the last recorded as H1, H2, ..., Hk-1 are shown in Fig. Including the main track entrance to the left of the wagon (credited to H0), the main track of the right to export (still recorded as Hk). No. a1, a2, L, an n-wagons from the main entrance into orbit followed by the dispatch room arrangements into cars derailed priorities, as well as cars derailed according to reorder priorities 1,2, ..., n. Room scheduling arrangements in order wagon into the derailment, to abide by the following rules : (1) H0 wagon entrance of
Platform: | Size: 62547 | Author: stzxxxstz | Hits:

[WinSock-NDISCSSsc

Description: CSS就是Cascading Style Sheets,中文翻译为“层叠样式表”,简称样式表,它是一种制作网页的新技术。 网页设计最初是用HTML标记来定义页面文档及格式,例如标题<h1>、段落<p>、表格<table>、链接<a>等,但这些标记不能满足更多的文档样式需求,为了解决这个问题,在1997年W3C(The World Wide Web Consortium)颁布HTML4标准的同时也公布了有关样式表的第一个标准CSS1, 自CSS1的版本之后,又在1998年5月发布了CSS2版本,样式表得到了更多的充实。W3C把DHTML(Dynamic HTML)分为三个部分来实现:脚本语言(包括JavaScript、Vbscript等)、支持动态效果的浏览器(包括Internet Explorer、Netscape Navigator等)和CSS样式表。 -CSS is Cascading Style Sheets. the Chinese translation for "cascading style sheet," which is abbreviated style sheet, it is a website production of new technologies. Web page design was first used to define HTML tags and page document formats, such as title
Platform: | Size: 327026 | Author: 李强 | Hits:

[BREWE808ZCDG5-FULL

Description: 三星E808水改机H1版刷机程序。行机和马行勿用。-water diverted for H1 version Brush procedures. OK machines and horse OK not to use.
Platform: | Size: 5111339 | Author: 力杰 | Hits:

[Other resourceCSSsuchengshouce

Description: CSS就是Cascading Style Sheets,中文翻译为“层叠样式表”,简称样式表,它是一种制作网页的新技术。 网页设计最初是用HTML标记来定义页面文档及格式,例如标题<h1>、段落<p>、表格<table>、链接<a>等,但这些标记不能满足更多的文档样式需求,为了解决这个问题,在1997年W3C(The World Wide Web Consortium)颁布HTML4标准的同时也公布了有关样式表的第一个标准CSS1, 自CSS1的版本之后,又在1998年5月发布了CSS2版本,样式表得到了更多的充实。W3C把DHTML(Dynamic HTML)分为三个部分来实现:脚本语言(包括JavaScript、Vbscript等)、支持动态效果的浏览器(包括Internet Explorer、Netscape Navigator等)和CSS样式表。
Platform: | Size: 326165 | Author: longlong | Hits:

[Internet-NetworkNEE_ospf

Description: 工具:Dynamips, VPCS 结点: R1: 10.0.0.0/8, 90.0.0.0/8 R2: 20.0.0.0/8, 90.0.0.0/8 R3: 30.0.0.0/8, 90.0.0.0/8 H1: 10.0.0.2 H2: 20.0.0.2 H3: 30.0.0.2 要求: R1,R2,R3之间直接用串口(serial) 相连,采用X.25封装。 分配给串口的X.25地址不作限制。 目的:使得H1,H2,H3可以在IP层互通
Platform: | Size: 1037 | Author: 卢天华 | Hits:

[Internet-NetworkNEE_ACL

Description: 工具:Dynamips, VPCS 结点: R1: 10.0.0.0/8, 90.0.0.0/8 R2: 20.0.0.0/8, 90.0.0.0/8 S1: ethsw(以太网交换机) H1: 10.0.0.2 H2: 20.0.0.2 H3: 10.0.0.3 要求: 在R1的E2/0上部署out扩展ACL只禁止10.0.0.3访问90.0.0.2 在R2的E0/0上部署out标准ACL只禁止来自10.0.0.2的流量 在R2的E2/0上部署反身(reflexive)ACL 允许E2/0接口接收由20.0.0.0子网主动发起的返回流量 允许E2/0接口连接的其他网络可以主动访问R2自己 禁止其他流量
Platform: | Size: 1007 | Author: 卢天华 | Hits:

[assembly languageFIR2

Description: 用线性缓冲区和间接寻址方法实现FIR滤波器 * *N=5,y(n)=h0*x(n)+h1*x(n-1)+h2*x(n-2)+h3*x(n-3)+h4*x(n-4)
Platform: | Size: 1071 | Author: hhh | Hits:

[assembly languageFIR3

Description: 用线性缓冲区和带移位双操作数寻址方法实现FIR滤波器 * *N=5,y(n)=h0*x(n)+h1*x(n-1)+h2*x(n-2)+h3*x(n-3)+h4*x(n-4)*
Platform: | Size: 981 | Author: hhh | Hits:

[assembly languageFIR4

Description: *用循环缓冲区和双操作数寻址方法实现FIR滤波器 *N=80,y(n)=h0*x(n)+h1*x(n-1)+...+h78*x(n-78)+h79*x(n-79) *先用matlab,选择80点汉明窗设计一个截止频率为0.2pi的低通滤波器
Platform: | Size: 1274 | Author: hhh | Hits:

[assembly languageFIR5

Description: 系数对称的FIR滤波器设计 * *N=8,h(n)=h(N-1-n) * *y(n)=h0*[x(n)+x(n-7)]+h1*[x(n-1)+x(n-6)] * * +h2*[x(n-2)+x(n-5)]+h3*[x(n-3)+x(n-4)]
Platform: | Size: 1014 | Author: hhh | Hits:

[Other resourceH1

Description: 一个j2me的小程序,实现高级界面,演示高级界面的各个特性
Platform: | Size: 10763 | Author: 胡恒 | Hits:

[OS DevelopH1(doswin)

Description: 汇编语言与计算机体系结构-H1软件 分别是dos版本和win版本-Assembly language and computer architecture-H1 are dos version of the software version and win
Platform: | Size: 2740224 | Author: 陈昌亮 | Hits:

[OtherPROGRAM-TO-SHOW-THAT-H1

Description: PROGRAM TO SHOW THAT H1
Platform: | Size: 11264 | Author: pravat | Hits:

[Other systemsWAP-to-check-whether-a-given-system-H1

Description: WAP to check whether a given system H1
Platform: | Size: 11264 | Author: pravat | Hits:

[Applications趋势头皮-点差要求不高-建议H1

Description: 这是一个头皮EA 用在H1 不需要低延迟,因为是做1小时周期(This is a scalp EA for H1)
Platform: | Size: 19456 | Author: 左大大 | Hits:

[OtherSoeHoe.ID_ATP Prototype AUDUSD H1 3.0

Description: Forex Expert Advisor for AUDUSD H1
Platform: | Size: 886784 | Author: dinhtran | Hits:

[Finance-Stock software system趋势头皮-点差要求不高-建议H1

Description: 趋势头皮-点差要求不高-建议H1 Trend Scalp - Point Difference Requirements Not High - Recommendation H1(Trend Scalp - Point Difference Requirements Not High - Recommendation H1)
Platform: | Size: 19456 | Author: ww5510100 | Hits:
« 12 3 4 5 6 7 8 9 10 »

CodeBus www.codebus.net