- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
扩展HTMLParser对自定义标签的处理能力
HTMLParser是一个用来解析HTML文档的开放源码项目,它具有小巧、快速、使用简单的特点以及拥有强大的功能。
现在该项目的最新版本是Integration Build 1.6,与之前版本的差别在于代码结构的调整、当然也有一些功能的提升以及BugFix,同时对字符集的处理也更加自动了。比较遗憾的该项目并没有详尽的使用文档,你只能借助于它的API文档、一两个简单例子以及源码来熟悉它。
如果是HTML文档,那么用HTMLParser已经差不多可以满足你至少90%的需求。一个HTML文档中可能出现的标签差不多在HTMLParser中都有对应的类,甚至包括一些动态的脚本标签,例如%...%这种JSP和ASP用到的标签都有相应的JspTag对应。HTMLParser的强大功能还体现在你可以修改每个标签的属性或者它所包含的文本内容并生成新的HTML文档,比如你可以文档中的链接地址偷偷的改成你自己的地址等等。
首先我们先解释一下什么叫自定义标签,我把所有不是HTML脚本语言中定义的标签称之为自定义标签,比如可以是scriptlet、book等等,这是我们自己创造出来的标签。你可能会很奇怪,因为这些标签一旦用在HTML文档中是没有任何效果的,那么我们换另外一个例子,假如你要解析的不是HTML文档,而是一个WML(Wireless Markup Lauguage)文档呢?WML文档中的card,anchor等标签HTMLParser是没有现成的标签类来处理的。还有就是你同样可以用HTMLParser来处理XML文档,而XML文档中所有的标签都是你自己定义的。
为了使我们的例子更具有代表意义,接下来我们将给出一段代码用来解析出WML文档中的所有链接,了解WML文档的人都知道,WML文档中除了与HTML文档相同的链接写法外,还多了一种标签叫anchor,例如在一个WML文档我们可以用下面两种方式来表示一个链接
a href=”?cat_id=1”Java自由人/a
或者:
anchor
Java自由人 go href=”” method=”get” postfield name=”cat_id” value=”1”/
/go
/anchor
(更多的时候使用anchor的链接用来提交一个表单。) 如果我们还是使用LinkTag来遍历整个WML文档的话,那Anchor中的链接将会被我们所忽略掉。
下面我们先给出一个简单的例子,然后再叙述其中的道理。这个例子包含两个文件,一个是WML的测试脚本文件test.wml,另外一个是Java程序文件HyperLinkTrace.java,内容如下:
test.wml
?xml version=1.0?
!DOCTYPE wml PUBLIC -//WAPFORUM//DTD WML 1.1//EN /DTD/wml_1.1.xml
wml
card title=Java自由人登录
p
用户名:input type=text name=username size=15/
密码:input type=text name=password size=15/
br/
anchor现在登录
go href=/wap/user.do method=get
postfield name=name value=$(username)/
postfield name=password value=$(password)/
postfield name=eventSubmit_Login value=WML/
/go
/anchorbr/
a href=/wap/index.vm返回首页/a
/p
/card
/wml
test.wml中的粗体部分是我们需要提取出来的链接。
HyperLinkTrace.java
package demo.htmlparser;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import .URL;
import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.PrototypicalNodeFactory;
import org.htmlparser.tags.CompositeTag;
import org.htmlparser.tags.LinkTag;
import or
文档评论(0)