2014-12-09 6 views
0

Я пытаюсь преобразовать простую (но большую) таблицу HTML в CSV в Java.HTML TABLE to CSV converter

Я пробовал оглядываться за кодом, однако я не мудрее. Если бы кто-нибудь мог указать мне в правильном направлении, я был бы чрезвычайно благодарен.

Вот файл 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> 

ответ

1

Вы можете, возможно, что-то на скорую руку с помощью регулярных выражений, но более простой подход будет использовать HTML-анализатор и собирается оттуда. Jsoup - хороший.

This answer может быть хорошим местом для начала.

0

Если вы можете извлечь данные из html и преобразовать их в json, вы можете использовать следующий код jsfiddle для создания csv из json.

[jsfiddle]: http://jsfiddle.net/JXrwM/1801/ "Stack Overflow" 
2

Это легко сделать с 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(); 
    } 
0

Вы можете сделать это с помощью этого простого кода, нет необходимости использовать какие-либо внешние библиотеки

public static ArrayList<String> readInCSVFormat(File htmlFile) throws FileNotFoundException, IOException { 
    ArrayList<String> result = new ArrayList<>(); 
    ArrayList<String> data = FileUtil.readFile(htmlFile); 
    outer: for (int i = 0; i < data.size(); i++) { 
     String line = data.get(i).replaceAll("<[^>]*>", "").trim(); 
     if (!line.isEmpty()) { 
      if (line.matches("[0-9]+")) { 
       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; 
}