从HTML中提取表示为String的内容

时间:2011-09-06 18:47:41

标签: java html-parsing

我在String变量中有一个Big html,我想得到一个div的内容。我不能依赖正则表达式,因为它可以有嵌套的div。所以,我们假设我有以下字符串 -

String test = "<div><div id=\"mainContent\">foo bar<div>good best better</div>  <div>test test</div></div><div>foo bar</div></div>";

那我怎么能用一个简单的java程序来实现呢 -

<div id="mainContent">foo bar<div>good best better</div>  <div>test test</div></div>

我的approch是这样的(可能是可怕的,仍在努力纠正) -

public static void main(String[] args) {
            int count = 1;
        int fl = 0;
        String s = "<div><div id=\"mainContent\">foo bar<div>good best better</div>  <div>test test</div></div><div>foo bar</div></div>";
        String tmp = s;
        int len = s.length();
        for (int i=0; i<len; i++){
            int st = s.indexOf("div>");
            if(st > -1) {
                char c = s.charAt(st-1);
                if(c == '/') {
                    count--; 
                } else {
                    count++;
                }
                s = s.substring(st+4);
                System.out.println(s);
                i = i + st;
                System.out.println(c + " -- " + st + " -- " + count + " -- " + i);  
                if (count == 0) {
                    fl = i;
                    break;
                }
            }
        }
        System.out.println("final ind - " + fl);
        s = tmp.substring(0, fl + 4);
        System.out.println("final String - " + s);
}

2 个答案:

答案 0 :(得分:2)

我建议使用JSoup来解析HTML并找到您要查找的内容。

它确实符合简单要求。你可以用几行代码做你想做的事情!

  

jsoup是一个用于处理真实HTML的Java库。它提供   一个非常方便的API,用于提取和操作数据,使用   最好的DOM,CSS和类似jquery的方法。

     

jsoup实现了WHATWG HTML5规范,并将HTML解析为   与现代浏览器相同的DOM。

     

从URL,文件或字符串中抓取并解析HTML

     

使用DOM遍历或CSS选择器查找和提取数据

     

jsoup旨在处理中发现的各种HTML   野生;从原始和验证到无效的标签汤; jsoup会   创造一个明智的解析树。

使用selector syntax可以非常简单地查找和提取数据。

public static void main(final String[] args)
{
    final String s = "<div><div id=\"mainContent\">foo bar<div>good best better</div>  <div>test test</div></div><div>foo bar</div></div>";
    final Document d = Jsoup.parse(s);
    final Elements e = d.select("#mainContent");
    System.out.println(e.get(0));
}

输出

  <div id="mainContent">
   foo bar
   <div>
    good best better
   </div> 
   <div>
    test test
   </div>
  </div>

没有那么简单!

答案 1 :(得分:0)

我担心的答案是:你没有。至少没有一个“简单”的程序...

但是有希望:您可以使用HTML解析器库(如NekoHTMLHTMLParser,虽然后一个项目似乎已经死了)来解析字符串并检索您需要的部分。 / p>