使用javaProgram更新HTML文件

时间:2018-04-04 19:13:31

标签: java html html5 dom jsoup

我正在尝试每小时获取一个项目状态并发送电子邮件(Html格式)以及过去4小时的数据。我没有db来存储那些过去的值,所以我计划将它们存储在HTML文件本身中。

我有代码将html文件内容作为字符串获取但是我需要帮助来删除HTML表格中最底部的行并将新值附加到第一行,因为我只需要发送过去5小时的报告。因此,在发送时间为晚上7点时,<tr><td>19-Mar 7.00 PM</td> <td>4</td> <td>31</td> <td>50181</td> <td>555</td></tr>报告应添加到代码的<!--$NewRow to be inserted here$-->位置,<!--$ToBeRemoved_Start$--><!--$ToBeRemoved_End$-->之间的文字应删除。

我也知道它可以通过获取注释标记的索引值并在html中使用replace,append,concatenate来实现但是我需要知道是否有一种简单的方法来实现它使用一些类似的库jsoup等..请让我知道你的想法。

public String getHTML_String() {
    StringBuilder contentBuilder = new StringBuilder();
    try {
        BufferedReader in = new BufferedReader(new FileReader("emailOutput.html"));
        String str;
        while ((str = in.readLine()) != null) {
            contentBuilder.append(str);
        }
        in.close();
    } catch (IOException e) {
    }
    return contentBuilder.toString();

}

HtmlCodeBelow:

<!DOCTYPE html>
<html>

<head>
  <meta charset="ISO-8859-1">
  <title>Api Report</title>
  <style>
    table {
      font-family: arial, sans-serif;
      border-collapse: collapse;
      width: 100%;
    }
    
    td,
    th {
      border: 1px solid #dddddd;
      text-align: left;
      padding: 8px;
    }
    
    tr:nth-child(even) {
      background-color: #dddddd;
    }
  </style>
</head>

<body>
  <h2>Content Api</h2>
  <table>
    <tr>
      <th>Date Time</th>
      <th>Col1</th>
      <th>Col2</th>
      <th>Col3</th>
      <th>Col4</th>
    </tr>
    <!--$NewRow to be inserted here$-->
    <tr>
      <td>19-Mar 6.00 PM</td>
      <td>1.22%</td>
      <td>24.75%</td>
      <td>4.71 ms</td>
      <td>7.67</td>
    </tr>
    <tr>
      <td>19-Mar 5.00 PM</td>
      <td>1.22%</td>
      <td>24.75%</td>
      <td>4.71 ms</td>
      <td>8.67</td>
    </tr>
    <tr>
      <td>19-Mar 4.00 PM</td>
      <td>1.22%</td>
      <td>24.75%</td>
      <td>4.71 ms</td>
      <td>7.67</td>
    </tr>
    <tr>
      <td>19-Mar 3.00 PM</td>
      <td>1.22%</td>
      <td>24.75%</td>
      <td>4.71 ms</td>
      <td>7.67</td>
    </tr>
    <!--$ToBeRemoved_Start$-->
    <tr>
      <td>19-Mar 2.00 PM</td>
      <td>1.22%</td>
      <td>24.75%</td>
      <td>4.71 ms</td>
      <td>7.67</td>
    </tr>
    <!--$ToBeRemoved_End$-->
  </table>
</body>

</html>

1 个答案:

答案 0 :(得分:2)

使用JSoup实现这一点非常简单,因为:

  1. 您是HTML内容的所有者,因此您知道它们是什么。
  2. 内容将始终具有相同的结构。
  3. 可以使用以下代码来完成它。为了清晰起见,添加了评论。

    // Parse the html string into a document
    Document doc = Jsoup.parse(getHTML_String(), "UTF-8");
    
    // Get the table you want to remove and the first row
    Element rowToRemove = doc.getElementsByTag("tr").get(5);
    Element firstRow = doc.getElementsByTag("tr").get(0);
    
    // Create an element for the row you want to add    
    Element rowToAdd = new Element("tr");
    rowToAdd.html("<td>19-Mar 7.00 PM</td> <td>4</td> <td>31</td> <td>50181</td> <td>555</td>");
    
    // Add that new row after the first row element
    firstRow.after(rowToAdd);
    
    // Remove the unwanted row from the doc 
    rowToRemove.remove();
    
    System.out.println(doc.html());