Neeme Praks の回答は非常に優れており、空白を正しく保持していました。ただし、インライン HTML は本当に混乱します。
<span>This is<br />some text. Cool story.</span>
結果は
"This is"
または、独自のテキストを持たない要素を渡すと、null が返されます。
そのため、目的のためにメソッドを少し作り直す必要がありました。これは一部の人々に役立つかもしれないので、ここに投稿します。基本的な考え方は、最初の子だけを取得するのではなく、子を反復処理することです。これには、子を持たない要素の HTML を取得するケースも含まれます。
このようにして元のスニペットが返されます:
This is<br />some text. Cool story.
public static String getText(Element cell) {
StringBuilder textBuilder = new StringBuilder();
for (Node node : cell.childNodes()) {
if (node instanceof TextNode) {
textBuilder.append(((TextNode)node).getWholeText());
}
else {
for (Node childNode : node.childNodes()) {
textBuilder.append(getText((Element)childNode));
}
textBuilder.append(node.outerHtml());
}
}
if (cell.childNodes().isEmpty()) {
textBuilder.append(cell.outerHtml());
}
return textBuilder.toString();
}