假设我复制了一个完整的HTML表(当每个tr
和td
都有额外的属性时)
成为一个字符串。如何获取所有内容(标签之间的内容)并创建一个像原始表一样组织的2D数组?
例如,对于此表:
<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这样的工具,可以自动完成所有工作而无需编写代码答案 0 :(得分:8)
这是使用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>
答案 1 :(得分:4)
也许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
答案 2 :(得分:0)
没关系,我在互联网上看到了这段代码:HtmlTableParser
现在看来我现在还有另一个问题,但这与这个问题并不完全相关,所以我会打开另一个问题。
答案 3 :(得分: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();
}