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();
}