【问题标题】:How to convert HTML <table> to a 2D array如何将 HTML <table> 转换为二维数组
【发布时间】:2012-08-11 15:56:05
【问题描述】:


假设我复制了一个完整的 HTML 表(当每个 trtd 都有额外的属性时) 成一个字符串。如何获取所有内容(标签之间的内容)并创建一个像原始表格一样组织的二维数组?

例如这个表:

<table border="1">
    <tr align= "center">
        <td align="char">TD1</td>
        <td>td1</td>
        <td align="char">TD1</td>
        <td>td1</td>
    </tr>
    <tr>
        <td>TD2</td>
        <td>tD2</td>
        <td class="bold>Td2</td>
        <td>td2</td>
    </tr>
</table>

我想要这个数组:

PS:我知道我可以使用正则表达式,但它会非常复杂。我想要一个像 JSoup 这样的工具,它可以自动完成所有工作而无需编写太多代码

【问题讨论】:

  • 如果 HTML 有效,您可以使用 SAX XML 解析器或 HTMLCleaner htmlcleaner.sourceforge.net。还有许多其他有助于解析 html 的库。只需检查此列表:java-source.net/open-source/html-parsers
  • 您实际上是在询问将您的表字符串解析为数据数组的算法?
  • 我刚刚补充说,我想要一个像 JSoup 这样的简单工具,它可以自动完成工作而无需编写和分析大量代码

标签: java android html arrays html-table


【解决方案1】:

出于我自己的需要,我找到了一种 javascript 自动将表格转换为二维数组的方法。 考虑以下代码:

document.querySelector("#table").children[0].children[r].children[c].innerText

在上面, r = 行索引和 c = 列索引。 可以像使用行索引和列索引一样自动访问数据。

这是另一种方式,类似于 2D 数组访问,但使用 CSS 选择器:

document.querySelector("tr:nth-child(5) td:nth-child(4)")

在第 5 行中找到第 4 列

【讨论】:

    【解决方案2】:

    到目前为止,它不是最好的,但我希望它会有所帮助......简单的字符串

    public void read_data() {
        try {
            file = new File("_result.xml");
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String line = "";
            String output = "";
            int a = 0, b = 0;
            boolean _write = false;
    
            while ((line = bufferedReader.readLine()) != null) {
                if(line.trim().startsWith("<td")) { _write = true; } else { _write = false; }
    
                if(_write) {
                    a = line.indexOf('>')+1;
                    b = line.lastIndexOf('<');
                    output += line.substring(a,b) + "|";
                }
    
                if(line.trim().equals("</tr>")) {
                    System.out.println(output);
                    output = "";
                }
    
            }
            fileReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    

    【讨论】:

      【解决方案3】:

      没关系,我在网上看到了这段代码:HtmlTableParser

      其实我现在好像还有一个问题,但是和这个问题不完全相关,所以我再开一个。

      【讨论】:

        【解决方案4】:

        这就是使用 JSoup (srsly, don't use regexp for HTML) 的方式。

        Document doc = Jsoup.parse(html);
        Elements tables = doc.select("table");
        for (Element table : tables) {
            Elements trs = table.select("tr");
            String[][] trtd = new String[trs.size()][];
            for (int i = 0; i < trs.size(); i++) {
                Elements tds = trs.get(i).select("td");
                trtd[i] = new String[tds.size()];
                for (int j = 0; j < tds.size(); j++) {
                    trtd[i][j] = tds.get(j).text(); 
                }
            }
            // trtd now contains the desired array for this table
        }
        

        另外,class 属性值在您的示例中未正确关闭:

        <td class="bold>Td2</td>
        

        应该是

        <td class="bold">Td2</td>
        

        【讨论】:

        • 如果我们在 HTML 表格中有 colspan 和 rowspan 属性?
        【解决方案5】:

        也许String.split('&lt;whateverhtmltabletag&gt;')可以帮助你?

        StringTokenizer 类也很有用。示例:

        String data = "one<br>two<br>three";  
        StringTokenizer tokens = new StringTokenizer(data, "<br>");  
        while (tokens.hasMoreElements()) {  
           System.out.println(tokens.nextElement());  // prints one, then two, then three
        }
        

        另外,使用indexOf("&lt;tag"),此处示例:http://forums.devshed.com/java-help-9/parse-html-table-into-2d-arrays-680614.html

        您还可以使用 HTML 解析器(如 jsoup),然后将表中的内容复制到数组中。这是 javascript 中的示例:JavaScript to parse HTML table of numbers into an array

        【讨论】:

          猜你喜欢
          • 2011-07-05
          • 2019-07-09
          • 2015-07-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-04
          • 1970-01-01
          • 2019-01-23
          相关资源
          最近更新 更多