1
У меня есть структура таблицы html с некоторыми данными в основной таблице, а некоторые - в вложенной таблице внутри элемента td.Как извлечь данные из таблицы html и ее внутренней таблицы?
Мне просто нужны необходимые данные (с указанием ** xx **), поэтому я могу экспортировать его в Excel как одну строку.
<table cellpadding="2" cellspacing="0" width="100%" class="chart">
<tr>
<td>**Text 1**</td>
<td>
<table cellpadding="2" cellspacing="0">
<tr>
<td>some useless data</td>
<td>**Text 2**</td>
</tr>
</table>
</td>
<td>**Text 3**</td>
<td>**Text 4**</td>
<td>**Text 5**</td>
</tr>
</table>
Мой код выглядит так:
for (Element row : excel.select("tr")) {
// create row for each tag
header = sheet.createRow(rowCount);
// loop through all th tag
Elements ths = row.select("th");
int count = 0;
for (Element element : ths) {
// set header style
cell = header.createCell(count);
cell.setCellValue(element.text());
cell.setCellStyle(headerStyle);
count++;
}
// now loop through all td tag
Elements tds = row.select("td");
count = 0;
for (Element element : tds) {
if(!element.text().isEmpty()){
cell = header.createCell(count);
cell.setCellValue(element.text());
count++;
}
}
Проблема здесь состоит в том, что выход не был, как и ожидалось.
Похоже, это в Excel:
Row1: Text 1 | Text 2 | useless data | Text 2 | Text 3 | Text 4 | Text 5 |
Row2: useless data | Text 2 |
Дополнительная информация: теги опущены для упрощения вопроса.
То, что я хочу
Row1: Text 1 | Text 2 | Text 3 | Text 4 | Text 5 |
Это немного неясно. Что это за вторая строка в вашем выходе? Кроме того, youo пропустил строки TH из предоставленного вами html. Я думаю, что '' ''
Еще не решил? – luksch
ответ
1. Два ряда
Я думаю
excel
это документ или таблицу. В любом случае, когда вы выбираетеexcel.select("tr")
, вы также забираете внутренний столtr
. Чтобы этого избежать, вам нужно сделать селектор css более конкретным. Если я предполагаюexcel
быть документ, я могу сделать этов контексте вашего кода:
Объяснение: Jsoup создает
tbody
элемент внутри таблицы, если его нет , С помощью селектора я убедился, что выбран только прямой дочерний элементtr
. Элементы внешней таблицы выбраны. Я могу это сделать, потому что я знаю имя класса внешней таблицы и кажется уникальным.2. Неожиданное число столбцов
Это связано с тем, что ваш выбор
row.select("td")
заявление улавливаетtd
, содержащий внутреннюю таблицу. если вы хотите только ТДС без дочерних элементов, которые вы могли бы использовать это:3. бесполезные данные
Чтобы избавиться от этого, вам нужно просто отфильтровать его. Из вашего примера неясно, когда присутствуют бесполезные данные. Всегда ли это первый
td
во внутреннем столе? Если это так, вы можете это сделать (полное решение)источник
2015-08-01 14:03:18 luksch
** 1 ** Теперь все данные ушли ** 2 ** Это было вызвано ** бесполезными данными ** Теперь оно становится 'Row1: Text 1 | бесполезные данные | Текст 2 | Текст 3 | Текст 4 | Текст 5 | ' ' Row2: бесполезные данные | Текст 2 | ' – Runescapenoob
Извините, не понимаю. В чем проблема сейчас? Возможно, вы хотите создать новый вопрос или добавить соответствующую информацию к этому (но не изменяйте значение исходного вопроса). Держите его коротким, но достаточно, чтобы понять, что вы делаете, что получаете и чего хотите. – luksch
Первый метод возвращает мне пустой набор данных. Таким образом, я продолжал использовать исходные коды для этой части. Второй предложенный метод едва ли может выполнять эту работу как бесполезные данные, которые все еще захватываются. – Runescapenoob
Смежные вопросы