我正在尝试将简单(但很大)的HTML表格转换为Java格式的CSV。
我试过四处寻找代码,但不是更明智。如果有人能指出我正确的方向,我将非常感激。
这是我想要转换的html表文件:
<table border="1" width="100%">
<tr>
<th>Destination</th>
<th>Dial Code</th>
<th>Rate</th>
<th>Currency</th>
<th>Next Change</th>
<th>New Rate</th>
<th>Comments</th>
</tr>
<tr>
<td>Afghanistan Mobile Afghan Telecom</td>
<td>9375</td>
<td>0.1829</td>
<td>USD</td>
<td>----</td>
<td>----</td>
<td>----</td>
</tr>
<tr>
<td>Afghanistan Mobile Awcc</td>
<td>9370</td>
<td>0.1777</td>
<td>USD</td>
<td>----</td>
<td>----</td>
<td>----</td>
</tr>
<tr>
<td>Afghanistan Mobile Etisalat</td>
<td>9378</td>
<td>0.1595</td>
<td>USD</td>
<td>----</td>
<td>----</td>
<td>----</td>
</tr>
<tr>
<td>Afghanistan Mobile Mtn (Afghanistan)</td>
<td>9376</td>
<td>0.191</td>
<td>USD</td>
<td>----</td>
<td>----</td>
<td>----</td>
</tr>
答案 0 :(得分:4)
使用Jsoup很容易。你应该解析每一行并遍历该行中的每个单元格,用逗号分隔它们。像这样:
try {
FileWriter writer = new FileWriter("csv.txt");
Document doc = Jsoup.parseBodyFragment(table);
Elements rows = doc.getElementsByTag("tr");
for (Element row : rows) {
Elements cells = row.getElementsByTag("td");
for (Element cell : cells) {
writer.write(cell.text().concat(", "));
}
writer.write("\n");
}
writer.close();
} catch (IOException e) {
e.getStackTrace();
}
答案 1 :(得分:1)
您可以使用正则表达式来制作一些东西,但更简单的方法是使用HTML解析器并从那里开始。 Jsoup是一个很好的。
This answer可能是一个很好的起点。
答案 2 :(得分:0)
如果您可以从html中提取数据并将其转换为json,那么您可以使用以下jsfiddle代码从json创建csv。
[jsfiddle]: http://jsfiddle.net/JXrwM/1801/ "Stack Overflow"
答案 3 :(得分:0)
您可以通过这个简单的代码完成此操作,无需使用任何外部库
public static ArrayList<String> readInCSVFormat(File htmlFile) throws FileNotFoundException, IOException {
ArrayList<String> result = new ArrayList<>();
ArrayList<String> data = FileUtil.readFile(htmlFile); //this method returns the html page line by line in ArrayList only
outer: for (int i = 0; i < data.size(); i++) {
String line = data.get(i).replaceAll("<[^>]*>", "").trim();
if (!line.isEmpty()) {
if (line.matches("[0-9]+")) { //can be changeable as per the needs and optional
StringBuilder builder = new StringBuilder();
for (; i < data.size(); i++) {
line = data.get(i).replaceAll("<[^>]*>", "").trim();
if (line.isEmpty()) {
result.add(builder.toString().substring(0, builder.toString().lastIndexOf(',')));
continue outer;
}
builder.append(line).append(",");
}
}
}
}
return result;
}