Java HTML Parser应用
最近因为项目需要,研究了java html parser类库的应用。记录下使用要点:
主要的类说明:
1、Parser类
解析器主类,负责载入HTML代码并解析。
2、Node接口
用来表征在解析过程中使用的语法单元。示例如下段html代码:
<span> ----Tag node
text ----Text Node
</span>
文本和标签都是独立的node元素。text文本是标签span的child node
3、NodeFilter
标签过滤器接口,用来在parser或NodeList中过滤出需要的某一类node。
4、NodeList
数据结构,表示Node的集合
需要特别注意的地方:
Parser和NodeList都有一个名为extractAllNodesThatMatch(NodeFilter filter)的方法用来过滤出符合某个条件的node,但是其内部的实现机制不同。
Parser是在解析器的功能基础上使用Iteror实现。每次调用该方法后需要执行reset方法,否则会影响下一次调用的结果。
而NodeList是在内部的数组上进行循环判断,因此各次调用之间不会互相影响,效率也比Parser的高,土建使用。
代码示例:
实现getElementByID功能
<code>
public class NodeIDFilter implements NodeFilter {
private String id;
public NodeIDFilter(String id)
{
this.id=id;
}
public boolean accept(Node node) {
if(node instanceof Tag)
{
if(!((Tag)node).isEndTag())
{
String s=((Tag)node).getAttribute("id");
if(s!=null)
return s.equals(this.id);
}
}
return false;
// throw new UnsupportedOperationException("Not supported yet.");
}
}
public class MHTMLParser
{
....
protected Node getElementById(String id) throws ParserException
{
//this.myparser.reset();
if(this.mNodeList==null||this.mNodeList.size()==0) return null;
NodeIDFilter nodef = new NodeIDFilter(id);
NodeList nl = this.mNodeList.extractAllNodesThatMatch(nodef,true);
//
if (nl.size() != 0)
{
return nl.elementAt(0);
}
return null;
}
}
</code>
相关文档:
类是广泛的概念,表示一个有共同性质的群体。如:人类。
代码:
// 声明一个类“Human”
class Human{
priv ......
語法
說明
<! - - ... - ->
用於HTML文件中的註解
<A HREF TARGET=>
指定超鏈結的分割視窗目標
<A HREF=#錨的名稱>
設定鏈結錨點的名稱
<A HREF=>
設定超鏈 ......
try {
String source = "xxx.xls";
InputStream is = new FileInputStream(source);
Workbook rwb = Workbook.getWorkbook(is);
Sheet sheet = rwb.getSheet(0);
for (int i = 1; i < sheet.getRows(); i++) {
for (int j = 1; j < sheet.getColumns(); j++) {
//获取指定单元格 ......
win7系统下Java环境变量的配置 Jdk版本为1.6
打开控制面板->用户帐户->更改我的环境变量
变量名:JAVA_HOME
变量值:D:\Program Files\Java\jdk1.6.0_12(这只是我的JDK安装路径)
变量名:Path
在变量值的最前面加上:%JAVA_HOME%\bin;(若已经有Path项,无须另外新 ......
在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解。
刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有方法名,没有方法体的东西,我实现它又有什么用呢?我从它那什么也得不到,除了一些方法名,我直接在具体类里加入这些方 ......