Есть ли обертка SQL для запроса таблицы HTML

Есть много вопросов о том, как отформатировать результаты запроса SQL в таблицу HTML, но я бы хотел пойти другим путем — учитывая произвольную таблицу HTML со строкой заголовка, я хотел бы иметь возможность извлечь информация формирует одну или несколько строк с использованием SQL (или языка, подобного SQL). Прост в изложении, но, видимо, не так просто выполнить.

В конечном счете, я бы предпочел правильно проанализировать HTML с помощью чего-то вроде libtidy или JSoup, но хотя документация по API обычно разумна, когда речь идет о примерах или руководствах по с помощью их, вы обычно найдете пример извлечения <заглавие> тег (который может быть выполнен с помощью регулярных выражений) без реальных примеров использования библиотеки. Таким образом, хороший ресурс или пример кода для одной из существующих, установленных библиотек также будет хорошим.

2

Решение

Простой код для преобразования таблицы в список кортежей с помощью JSoup выглядит так:

public class Main {
public static void main(String[] args) throws Exception {
final String html =
"<html><head/><body>" +
"<table id=\"example\">" +
"<tr><td>John</td><td>Doe</td></tr>" +
"<tr><td>Michael</td><td>Smith</td>" +
"</table>" +
"</body></html>";

final List<Tuple> tuples = parse (html, "example");
//... Here the table is parsed
}

private static final List<Tuple> parse(final String html, final String tableId) {
final List<Tuple> tuples = new LinkedList<Tuple> ();

final Element table = Jsoup.parse (html).getElementById(tableId);
final Elements rows = table.getElementsByTag("tr");
for (final Element row : rows) {
final Elements children = row.children();
final int childCount = children.size();
final Tuple tuple = new Tuple (childCount);
for (final Element child : children) {
tuple.addColumn (child.text ());
}
}

return tuples;
}
}

public final class Tuple {
private final String[] columns;

private int cursor;

public Tuple (final int size) {
columns = new String[size];
cursor = 0;
}

public String getColumn (final int no) {
return columns[no];
}

public void addColumn(final String value) {
columns[cursor++] = value;
}
}

С этого момента вы можете, например, создать таблицу в памяти с H2 и использовать обычный SQL.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector