posts - 33,  comments - 70,  trackbacks - 0
HTMLParser 1.6

/*
html : html内容
identifier: 搜索标识
*/

private Object[] extractText(String html, String identifier)
            
throws Exception {
        List
<String> resultTextList = new ArrayList<String>();

        Parser parser 
= new Parser();
        parser.setInputHTML(html);

        NodeFilter filter 
= new HasAttributeFilter("class", identifier);
 /* NodeFilter filter 就是要解析的过滤器,实现有好多种,我采用的属性过滤,其他more api*/

        NodeList nodeList 
= parser.extractAllNodesThatMatch(filter);
/* extractAllNodesThatAre(class)已经不被推荐使用,在1.6版本中,我感到更加体形了灵活性.更好的适用了自定义的tag */
        
if (nodeList == null)
            
return null;
        
if(nodeList.size() == 0)
            
return null;

        
// System.out.println("start ============== ,size = "
        
// + nodeList.size());
        Node[] nodes = nodeList.toNodeArray();
        String line 
= "";
        
for (int i = 0; i < nodes.length; i++{
            Node node 
= nodes[i];   /*得到所以符合的节点,类型化做对应的标签类*/
        
if (node instanceof Span) {
                Span spanTag 
= (Span) node;
                line 
= spanTag.toPlainTextString();
            }
 else if (node instanceof TableColumn) {
                TableColumn tableTag 
= (TableColumn) node;
                line 
= tableTag.toPlainTextString();
            }
 else if (node instanceof Div) {
                Div divTag 
= (Div) node;
                line 
= divTag.toPlainTextString();
            }

            
if (StringUtil.isTrimEmpty(line)){
                
continue;
            }
else{
                resultTextList.add(line);
            }

            
        }

        
return resultTextList.toArray();
    }


StringUtil 常用类
/**
     * 去掉左右空格后字符串是否为空
     
*/

    
public static boolean isTrimEmpty(String astr)
    
{
        
if ((null == astr) || (astr.length() == 0))
        
{
            
return true;
        }

        
if (isBlank(astr.trim()))
        
{
            
return true;
        }

        
return false;
    }


    
/**
     * 字符串是否为空:null或者长度为0.
     
*/

    
public static boolean isBlank(String astr)
    
{
        
if ((null == astr) || (astr.length() == 0))
        
{
            
return true;
        }

        
else
        
{
            
return false;
        }

    }
posted on 2006-05-22 17:30 地狱男爵(hellboys) 阅读(2869) 评论(1)  编辑  收藏 所属分类: 编程语言(c/c++ java python sql ......)

FeedBack:
# re: HTMLParser属性解析
2006-06-02 21:45 | libby
想请教作者,可能是由于html的语法不规范所至,我用Htmlparser分析html文档出现错误,像普通的Html文档其结束标记如果存在重复,一般不予理睬,可是在用Htmlparser其会进行处理,往往会引起一些显示问题.
我想利用htmlparser分析html页面,生成一棵树,感觉不应该出现的错误却出现了.
作者可否跟俺取得联系,我想同你讨论一下.俺邮箱是:libby22@sohu.com或者MSN:libby22@hotmail.com

着急,谢谢!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2006年5月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

随笔分类

随笔档案

文章档案

相册

连接

最新随笔

搜索

  •  

最新评论

阅读排行榜

评论排行榜