`
wode66
  • 浏览: 744017 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 

 

 

分享到:
评论

相关推荐

    HtmlParser学习笔记-- htmlparser简介

    HtmlParser 是一个用于解析HTML文档的Java库,它允许开发者以结构化的方式处理HTML内容,以便提取信息或进行数据抓取。在HtmlParser中,HTML页面的结构通过三种主要的数据结构来表示:Node、AbstractNode和Tag。 1....

    前端开源库-parse5-htmlparser2-tree-adapter

    在`parse5-master`这个压缩包中,很可能包含了parse5库的源码和相关资源,你可以通过阅读源码、查看示例和文档来更深入地理解这个库的工作原理,以及如何有效地使用`parse5-htmlparser2-tree-adapter`。同时,熟悉这...

    HTMLParser-2.0-SNAPSHOT

    这个"HTMLParser-2.0-SNAPSHOT"版本可能是HTMLParser的一个开发版本或测试版本,包含了最新的特性和改进。 HTMLParser提供了丰富的API,使得开发者可以方便地操作HTML元素,如标签、属性和文本。以下是一些关键的...

    java解析html工具htmlparser的jar包及api文档

    在提供的压缩包中,`HTMLParser-2.0-SNAPSHOT-bin`可能是可执行的二进制文件,包括了编译好的JAR文件和其他运行所需的资源。而`HTMLParser-2.0-SNAPSHOT`可能包含了源代码,这对于开发者来说是宝贵的,因为他们可以...

    前端开源库-htmlparser-to-html

    `htmlparser-to-html`是一个针对这个需求的开源库,它专注于将`htmlparser`或`htmlparser2`解析生成的JSON格式数据转换回原始的HTML字符串。下面我们将深入探讨这个库的核心功能、应用场景以及如何使用。 ### 核心...

    HTMLParser-2.0-SNAPSHOT-bin.zip JAVA html解析库

    public class HtmlLinkParser { //获取子链接,url为网页url,filter是链接过滤器,返回该页面子链接的HashSet public static Set&lt;String&gt; extracLinks(String url, LinkFilter filter) { ...

    HTMLParser-2.0-API.CHM

    HTMLParser-2.0-API.CHM

    HtmlParser的使用

    二、安装与依赖 要使用HTMLParser,首先需要将其添加到你的项目依赖中。如果你的项目使用Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.htmlparser &lt;artifactId&gt;htmlparser 最新版本号 ``` 请...

    htmlparser学习笔记

    通过熟练掌握HTMLParser的API和节点遍历机制,可以轻松地实现网页数据提取、内容修改等复杂任务。对于想要深入学习和实践的开发者,访问HTMLParser的中文论坛(http://bbs.hexiao.cn/thread.php?fid=6)可以获取更多...

    htmlparser-1.6p.jar

    "htmlparser-1.6p.jar"是该库的特定版本,用于在Java环境中集成和使用。 HTMLParser的核心功能包括: 1. **标签和属性处理**:它可以识别并解析HTML文档中的各种标签,如`&lt;html&gt;`, `&lt;head&gt;`, `&lt;body&gt;`等,同时处理...

    正则表达式+_HTMLParser使用详解-2010-03-21

    二、HTMLParser 1. **HTMLParser介绍**:HTMLParser是Python标准库中的一个模块,用于解析HTML和XML文档,通过事件驱动的方式处理标签的开始、结束、属性等。 2. **类结构**:HTMLParser类提供了一个基础的解析...

    htmlparser-1.2.1 jar

    htmlparser-1.2.1jar包下载htmlparser-1.2.1jar包下载

    htmlparser-c++

    首先,我们来了解HTMLParser-C++的基本原理。HTML并非一种严格的XML格式,因此解析HTML需要处理其非规范性和不确定性。HTMLParser-C++库通过解析HTML的语法特性,识别出标签、属性和文本节点,并将其转化为易于处理...

    HTMLParser 2.0最新jar API 源代码

    3. **HTMLParser-2.0-SNAPSHOT-bin.zip**:这部分是编译后的二进制文件,通常包括jar包,可以直接在Java项目中引用。将此jar包添加到项目的类路径中,就可以在程序中使用HTMLParser提供的各种解析功能了。 ...

    HTMLParser-2.0-javadoc.chm

    自制CHM版的API文档,带索引。 注:如果各位下载后打开或无法显示页面,请在CHM文件右键—属性—解除锁定即可。

    HtmlParser笔记

    - "HtmlParser学习笔记总结.doc":对学习过程的总结,可能包含常见问题解答和最佳实践。 - "yanghaisheng.platform.htmlparser.rar":可能包含一个示例平台或项目,供用户实践和参考。 总之,HtmlParser是Java中一...

Global site tag (gtag.js) - Google Analytics