У меня есть эта странная проблема, о которой я нахожусь на своем пути. Возможно, свежий набор глаз может решить проблему!Jsoup анализирует таблицу 3 раза?
Я использую jSoup для разбора файла HTML. Проблема заключается в том, что набор таблиц выводится в файл 3-4 раза, даже когда он записывается в новый новый файл. В первый раз он выводится как одна прямая линия по файлу .csv, но каждый раз он отформатирован точно так, как я хочу. Но я, очевидно, хочу, чтобы это было правильно в первый раз, и у меня это так, что в первый раз!
Мой код:
Document doc = new Document(file.toString());
doc = Jsoup.parse(file, null);
Elements tables = doc.select("table");
for (Element table: tables) {
Elements rows = table.select("tr");
for (Element row: rows) {
Elements cells = row.getElementsByTag("td");
StringBuffer values = new StringBuffer();
for (Element cell: cells) {
String cellText = cell.text();
cellText = cellText.replaceAll(",", "");
cellText = cellText.replaceAll("£", ",£");
cellText = cellText.replaceAll(",£", "£");
System.out.println(cellText);
values.append(cellText + ",");
}
System.out.println(values.toString());
addToFile(values + ",");
}
}
// add new data to mySNMPResults file
private static void addToFile(String myString) { // add newest entry to .csv
// file
try {
BufferedWriter out = new BufferedWriter(new FileWriter(
"MyParsedDOMTree.csv", true));
out.write(myString + "\n");
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Это также может быть просто случай сложного HTML-файла, различные таблицы, вложенные друг в друга, но я не вижу, как это вызывает таблицы с номером данных, появляется только один раз для вывода в три раза ...
EDIT
Фрагмент HTML:
<tr bgcolor = "#EEEEEE" height = 20 >
<td width = 15% >
<font face="tahoma" size="1">
Dept '<b>Food Incl Vat</b>'
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£688.95
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£642.60
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£767.95
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£3,007.00
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£1,525.60
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£1,970.40
</td>
<td width = 10% align =
right><font face="tahoma" size="1">
£353.00
</td>
<td width = 1%></td><td width
= 14% align = right bgcolor = "#DFDFDF"><font face="tahoma" size="1" color = '#444444'>
<b>£8,955.50</b></td>
</tr>
Спасибо за ответ, но я боюсь, что HTML в этом случае очень сложно по сравнению с простым один вы использовали. Я хочу распечатать каждую таблицу в файле csv. И метод size() возвращает количество таблиц на этой странице (всего 27), поэтому теоретически я должен просто пропустить и распечатать. – GreenGodot
Я только заметил, что если бы я заменил размер на 5, тогда таблица распечатывается ровно один раз. Проблема в том, что я хочу, чтобы это работало с несколькими различными файлами HTML с разными размерами, поэтому я не могу использовать фиксированный номер .... – GreenGodot
Вот почему вам нужно найти все таблицы, поместить их в массив Elements и затем отсканировать этот массив , Можете ли вы привести мне пример некоторых из html, чтобы я мог больше помочь вам? – Collin