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()等方法时需要注意。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值