как извлечь содержимое из <div>тег Java - PullRequest
5 голосов
/ 17 мая 2011

У меня серьезная проблема.Я хотел бы извлечь содержимое из тега, например:

<div class="main-content">
    <div class="sub-content">Sub content here</div>
      Main content here </div>

вывод, который я ожидал бы:

Подконтроль здесь
Основной контент здесь

Я пытался использовать регулярные выражения, но результат не так впечатляет.Использование:

Pattern.compile("<div>(\\S+)</div>");

вернет все строки до первого тега <* / div>
, так что, кто-нибудь может мне помочь, пожалуйста?

Ответы [ 2 ]

8 голосов
/ 17 мая 2011

Я бы рекомендовал избегать регулярных выражений для разбора HTML.Вы можете легко сделать то, что вы просите, используя Jsoup :

public static void main(String[] args) {
    String html = "<html><head/><body><div class=\"main-content\">" +
            "<div class=\"sub-content\">Sub content here</div>" +
            "Main content here </div></body></html>";
    Document document = Jsoup.parse(html);
    Elements divs = document.select("div");
    for (Element div : divs) {
        System.out.println(div.ownText());
    }
}

В ответ на комментарий: если вы хотите поместить содержимое элементов div в массивиз String s вы можете просто сделать:

    String[] divsTexts = new String[divs.size()];
    for (int i = 0; i < divs.size(); i++) {
        divsTexts[i] = divs.get(i).ownText();
    }

В ответ на комментарий: если у вас есть вложенные элементы и вы хотите получить собственный текст для каждого элемента, вы можете использовать синтаксис множественного выбора jquery,Вот пример:

public static void main(String[] args) {
    String html = "<html><head/><body><div class=\"main-content\">" +
            "<div class=\"sub-content\">" +
            "<p>a paragraph <b>with some bold text</b></p>" +
            "Sub content here</div>" +
            "Main content here </div></body></html>";
    Document document = Jsoup.parse(html);
    Elements divs = document.select("div, p, b");
    for (Element div : divs) {
        System.out.println(div.ownText());
    }
}

Приведенный выше код проанализирует следующий HTML-код:

<html>
<head />
<body>
<div class="main-content">
<div class="sub-content">
<p>a paragraph <b>with some bold text</b></p>
Sub content here</div>
Main content here</div>
</body>
</html>

и выведет следующий вывод:

Main content here
Sub content here
a paragraph
with some bold text
2 голосов
/ 17 мая 2011
<div class="main-content" id="mainCon">
    <div class="sub-content" id="subCon">Sub content here</div>
 Main content here </div>

Из этого кода, если вы хотите получить результат, который вы упомянули

Используйте document.getElementById("mainCon").innerHTML, это даст Основное содержание здесь вместе с sub div, но вы анализируете эту вещь.

И аналогично для sub-div вы можете использовать приведенный выше фрагмент кода, т.е. document.getElementById("subCon").innerHTML

...