Java-эквивалент для HTML :: TableExtract - PullRequest
0 голосов
/ 15 февраля 2012

Может кто-нибудь предложить библиотеку для Java, которая похожа на модуль perl HTML :: TableExtract .Одной из отмеченных особенностей этого модуля является то, что он может помочь пользователю легко идентифицировать вложенные таблицы, используя глубину и количество.Я использовал некоторые библиотеки, такие как JSoup, HTML-парсер и HTML-модуль.Но до сих пор у меня нет ничего похожего на модуль HTML :: TableExtract.Так может кто-нибудь здесь, пожалуйста, предложить мне какой-нибудь эквивалент этого модуля в Java, если таковые имеются?Потому что я пытаюсь найти ключевое слово в каждой таблице, и если оно присутствует, я собираюсь извлечь таблицу.В случае вложенных таблиц я хочу извлечь только таблицу, которая в качестве ключевого слова не является родительской таблицей.Заранее спасибо

@ Łukasz Rżanek, пожалуйста, рассмотрите следующий HTML-код

<html>
<table border=3 cellpadding=10>
<tr>
  <td valign=top>
    Content 1
  </td><td>
    Content 2<p>

    <table border=1>
    <tr>
      <td>Content 3</td>
      <td>Content 4</td>
    </tr><tr>
      <td>Content 5</td>
      <td>Content 6</td>
    </tr>
    </table><p>

    Content 7
  </td>
</tr>
</table>
</html>

Здесь я хочу извлечь только таблицу, которая содержит Содержимое 3. Как это сделать с помощью JSoup?

1 Ответ

1 голос
/ 16 февраля 2012

Возможно, вам понадобится добавить дополнительную логику.

Проверьте и дайте мне знать, если вы этого хотели?

 /**
 * @param args the command line arguments
 */
public static void main(String[] args) throws IOException {
    // TODO code application logic here
    Document doc = Jsoup.parse(new File("**//HTML File Path//**"), "utf-8");
    Elements elements = doc.getElementsContainingOwnText("**//Text to Search//**");
    for(Element element : elements) {
        Element table = getImmediateParentTable(element);
        System.out.println(table.outerHtml());
    }
}

public static Element getImmediateParentTable(Element element) {
    while(element.tagName().equals("table")) {
        return element;
    }
    return getImmediateParentTable(element.parent());
}
...