/ / Wie man Zeilen nur der ersten untergeordneten Tabelle mit Jsoup - html, jsoup analysiert

Wie man Zeilen nur der ersten Kindtabelle mit Jsoup analysiert - html, jsoup


Ich habe HTML, das ungefähr so ​​aussieht:

<table>
<tbody>
<tr>
<table>
<tbody>
<tr>
<td>Header 1</td>
<td>Value 1</td>
</tr>
<tr>
<td>Header 2 2</td>
<td>Value 2</td>
</tr>
<tr>
<td>Header 3</td>
<td>
Values 3 should be complete column
<table>
<tbody>
<tr>
<th>This should go into Value 3</th>
<th>This should go into Value 3 too, including its table</th>
</tr>
<tr>
<td>Again Value 3</td>
<td>Again into Value 3 too, including its table</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td>Header 4</td>
<td>Value 4</td>
</tr>
</tbody>
</table>
</tr>
</tbody>

Ich versuche eine Karte so zu erstellen, dass die ersteAus jeder Zeile der Tabelle auf der Ebene 1 wird der Schlüssel und aus der zweiten wird der Wert, egal was im zweiten td ist. Das Problem, dem ich gegenüberstehe ist, dass, wenn eine komplette Tabelle in der zweiten liegt, die Zeilen auch abgeholt werden, wenn ich sie tatsächlich als Wert haben möchte. Der Code, den ich benutze, ist dies:

Document doc = Jsoup.parse(htmlText);
Elements table = doc.select("table");
Element innerTable;
if(table!=null && table.size()>1){
innerTable = table.get(1);
}else{
innerTable = table.get(0);
}
Elements rows = innerTable.select("tr");
for(Element row : rows){
Elements cols = row.select("td");
String headerFromHTML = cols.get(0).text();
String valueFromHTML = cols.get(1).html();
System.out.println(headerFromHTML+","+valueFromHTML);
}

Erwartete Ausgabe:

Header 1, Value 1
Header 2, Value 2
Header 3, Value 3 should be complete td<table><tbody><tr><th>This should go into Value 3</th><th>This should go into Value 3 too, including its table</th></tr><tr><td>Again Value 3</td><td>Again into Value 3 too, including its table</td></tr></tbody></table>
Header 4, Value 4

Die tatsächliche Ausgabe liefert dies jedoch nicht. Die Reihe enthält tatsächlich auch innere tr und ich bekomme nicht das gewünschte Ergebnis. Tatsächlich wirft es aufgrund von th auch eine Ausnahme (die bearbeitet werden könnte, aber diese tr sollte tatsächlich im Wert kommen).
Wie kann ich meinen Code ändern? Bitte helfen Sie.

Antworten:

0 für die Antwort № 1

Zum einen sind die meisten Tags am falschen Ort. Für zwei hast du die Tabelle zu oft definiert. Für drei muss die Organisation verbessert werden. Für vier ist es wie es im Grunde aussehen soll

<table style="width:100%">
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>

Beachten Sie, dass HTML Elemente in der Reihenfolge anzeigt, wenn sie nicht durch eine andere Sprache geändert werden