当前位置: 首页 > 工具软件 > TagSoup > 使用案例 >

TagSoup开发指南

薛墨一
2023-12-01
对于TagSoup可能有些人会比较陌生,TagSoup是Java语言开发的,通过SAX引擎解析结构糟糕、令人抓狂的不规范HTML文档的小工具。TagSoup可以将一个HTML文档转换为结构良好的XML文档(近似于XHTML),方便开发人员对获取的HTML文档进行解析等操作。同时TagSoup提供了命令行程序,可以运行TagSoup来对HTML文档进行解析。

但是TagSoup的缺陷就是,官方网站([url]http://home.ccil.org/~cowan/XML/tagsoup/[/url])上不提供API文档的链接,同时也不提供开发指南,只提供了一个40页的幻灯片([url]http://home.ccil.org/~cowan/XML/tagsoup/[/url]),是其在Extreme Markup Languages 2004上的演讲。这对于将TagSoup整合到自己的应用程序中还是遇到了很大的挑战!

使用TagSoup的开发流程:

[list]
[*]创建Parser实例;
[*]提供自己的SAX2内容处理器
[*]提供只想需要解析的HTML的InputSource实例;
[*]开始parse()!
[/list]
由于个人能力有限,这几句话把我直接搞懵了,所以决定仔细研究下。

TagSoup包含2个包、16个类文件(文件数目还是比较少的,但是功能很强大!)。其中核心类包括Parser、PYXScanner、XMLWriter。

[list]
[*]org.ccil.cowan.tagsoup.Parser,该类继承自org.xml.sax.helpers.DefaultHandler,可知该类是一个SAX型的解析器;
[*]org.ccil.cowan.tagsoup.PYXScanner,该类实现了Scanner接口,用于读取解析后的内容;
[*]org.ccil.cowan.tagsoup.XMLWriter,该类继承自org.xml.sax.helpers.XMLFilterImpl,同时实现org.xml.sax.ContentHandler接口(这个是最主要的),也就是说XMLWriter是TagSoup为我们提供的HTML解析成XML文档的默认实现。
[/list]那么找到了这三个核心类,就按照上面的流程开始解析吧,以下是我个人写的一个小例子:
StringReader xmlReader = new StringReader("");
StringReader sr = new StringReader(html);
InputSource src = new InputSource(sr);//构建InputSource实例
Parser parser = new Parser();//实例化Parse
XMLWriter writer = new XMLWriter();//实例化XMLWriter,即SAX内容处理器
parser.setContentHandler(writer);//设置内容处理器
parser.parse(src);//解析
Scanner scan = new PYXScanner();
scan.scan(xmlReader, parser);//通过xmlReader读取解析后的结果
char[] buff = new char[1024];
while(xmlReader.read(buff) != -1) {
System.out.println(new String(buff));//打印解析后的结构良好的HTML文档
}
 类似资料: