Извлечение содержимого из HTML, представленного в виде строки - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть большой html в переменной String, и я хочу получить содержимое 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>

Ну, мой подход примерно такой (может быть ужасным, все еще пытаюсь исправить) -

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 ]

2 голосов
/ 06 сентября 2011

Я бы порекомендовал использовать JSoup для анализа HTML-кода и поиска того, что вы ищете.

Он точно соответствует требованию simple .Вы можете делать то, что хотите, всего за пару строк кода!

jsoup - это библиотека Java для работы с реальным HTML.Он предоставляет очень удобный API для извлечения и манипулирования данными с использованием лучших методов DOM, CSS и jquery-подобных.

jsoup реализует спецификацию WHATWG HTML5 и анализирует HTML в том же DOM, что и современные браузеры.

очистка и анализ HTML-кода из URL, файла или строки

поиск и извлечение данных с использованием обхода DOM или селекторов CSS

jsoup предназначен для работы со всеми вариантамиHTML, найденный в дикой природе;от нетронутого и проверяющего до недействительного супа-метки;jsoup создаст разумное дерево разбора.

Использование синтаксиса селектора делает поиск и извлечение данных чрезвычайно простым.

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));
}

output

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

Не намного проще, чем это!

0 голосов
/ 06 сентября 2011

Боюсь, ответ таков: вы этого не делаете. По крайней мере, не с "простой" программой ...

Но есть надежда: вы можете использовать библиотеку HTML-анализатора (например, NekoHTML или HTMLParser , хотя последний проект кажется мертвым), чтобы проанализировать строку и извлечь часть тебе нужно.

...