3


假设我将一个完整的 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 这样的工具,它可以自动完成所有工作,而无需编写太多代码


也许String.split('<whateverhtmltabletag>')可以帮助你?

上课也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("<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

4

5 回答 5

12

这就是使用 JSoup 完成的方法(srsly,不要对 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>
于 2012-08-15T11:25:31.030 回答
5

也许String.split('<whateverhtmltabletag>')可以帮助你?

上课也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("<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

于 2012-08-15T10:48:13.323 回答
0

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

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

于 2012-08-15T10:57:12.030 回答
0

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

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();
    }
于 2015-11-15T00:23:54.040 回答
0

为了我自己的需要,我找到了一种 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 列

于 2021-12-23T23:34:59.497 回答