wode66 发表于 2013-2-7 16:04:28

HtmlParser学习笔记(二)-

   这次主要演示下,如何迭代一个Node结点的所有根子结点。
    首先,先来看下需要解析的html页面的内容,该文件命名为htmlparser.html,详细内容如下所示(该页面以后将会多次使用):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>百度-title</title></head><body><!-- 注意:换行符对解析的影响! --><table><tr><td>td-c1</td></tr><tr><td>td-c2</td></tr></table><table><tr><td>td-a1</td></tr><tr><td>td-a2</td></tr></table><table><tr><td>td-b1</td></tr><tr><td>td-b2</td></tr></table></body></html>   注:由于页面采用的url方式访问,所以要先用myeclipse建立个空的web工程,然后把该页面放到该工程下,部署该工程后,启动tomcat即可。接下来就可以使用下面的代码来进行解析了。
 
    接着,来看下具体解析的例子,先把例子运行起来,然后我们再来分析结果,详细代码如下:
package com.javaeye.suo.htmlparser.samples;import org.htmlparser.Node;import org.htmlparser.Parser;import org.htmlparser.util.NodeIterator;import org.htmlparser.util.NodeList;import org.htmlparser.util.ParserException;import com.javaeye.suo.htmlparser.HtmlParserUtils;import com.javaeye.suo.htmlparser.UrlToStringUtil;;public class IteratorDemo {/** * 迭代一个Node结点的所有根子结点 * @param parser*/public void listAll(Parser parser) {try {NodeIterator nodeIterator = parser.elements();while( nodeIterator.hasMoreNodes()) {System.out.println("======================================");Node node = nodeIterator.nextNode();System.out.println("getText():" + node.getText());System.out.println("toHtml():" + node.toHtml());}} catch (ParserException e) {e.printStackTrace();}}public static void main(String[] args) {String urlStr = "http://localhost:8080/HtmlParser/htmlparser.html";                //HtmlParserUtils类为自己提炼的一个公用类,详细代码将会在后面提供。Parser parser = HtmlParserUtils.getParserWithUrlConn(urlStr, "utf-8");IteratorDemo it = new IteratorDemo();it.listAll(parser);}}   运行结果:
 
1、===============================================getText():!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"toHtml():<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2、===============================================getText():toHtml():3、===============================================getText():html xmlns="http://www.w3.org/1999/xhtml"toHtml():<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>百度-title</title></head><body><div id="outter"><div id="inner"><!--这是注释-->百度-div-inner<a href="http://www.baidu.com">百度-A</a></div>百度-div-outter</div><!-- 注意:换行符对解析的影响! --><table><tr><td>td-c1</td></tr><tr><td>td-c2</td></tr></table><table><tr><td>td-a1</td></tr><tr><td>td-a2</td></tr></table><table><tr><td>td-b1</td></tr><tr><td>td-b2</td></tr></table></body></html>    分析:
          这个demo的目的主要是让大家对htmlparser包有个初步的认识,所以代码比较简单。另外,这里有些需要注意的方法,如下:
          1、node.getText()返回该结点标签的内容,也就是尖括号<>内的内容,包括了标签的属性。
          2、大家仔细观察第二个node.getText()输出,会发现这里输出的内容都是空白,这是因为htmlparser在解析html时,对所有换行符也进行了解析,所以要特别注意,这点尤其在使用node.getFirstChild()等方法时需要注意。
 
 
 
页: [1]
查看完整版本: HtmlParser学习笔记(二)-