如何使用Jsoup提取独立的文本节点?

21

我有一个像这样的元素:

<td> TextA <br/> TextB </td>

如何将TextA和TextB分别提取出来?

1个回答

26

有几种方法。这主要取决于文档本身以及给定的HTML标记是否一致。在这个特定的例子中,您可以通过Element#childNodes()来获取td的子节点,然后逐个测试每个节点是否为TextNode

例如:

Element td = getItSomehow();

for (Node child : td.childNodes()) {
    if (child instanceof TextNode) {
        System.out.println(((TextNode) child).text());
    }
}
我认为如果Jsoup提供一个类似于Element#children()Element#textNodes()或类似的方法来获取子文本节点将会很不错(在您的示例中,它将返回<br />元素)。这会产生以下结果:

 TextA 
 TextB 

16
我已经在1.6.2版本中实现了Element#textNodes(),感谢您的建议。https://github.com/jhy/jsoup/commit/7b9f17760049161b775fd23b15653961620e259d - Jonathan Hedley
2
@JonathanHedley 您真是一个救命恩人!我无法感谢您的辛勤工作。您的代码和注释完美无缺,为我节省了许多在Google和StackOverflow上搜索的时间。 - stackular

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接