Как извлечь отдельные текстовые узлы с помощью Jsoup?

У меня есть такой элемент:

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

Как я могу извлечь TextA и TextB отдельно?


person M.M    schedule 23.08.2011    source источник


Ответы (1)


Несколько путей. Это действительно зависит от самого документа и от того, является ли данная HTML-разметка последовательной или нет. В этом конкретном примере вы можете получить дочерние узлы td с помощью Element#childNodes() , а затем протестировать каждый узел отдельно, если это TextNode или нет.

E.g.

Element td = getItSomehow();

for (Node child : td.childNodes()) {
    if (child instanceof TextNode) {
        System.out.println(((TextNode) child).text());
    }
}

что приводит к

 TextA 
 TextB 

Я думаю, было бы неплохо, если бы Jsoup предложил Element#textNodes() или что-то еще, чтобы получить дочерние текстовые узлы, как это делает Element#children(), чтобы получить дочерние элементы (что вернуло бы элемент <br /> в вашем примере).

person BalusC    schedule 23.08.2011
comment
Я реализовал Element#textNodes() для 1.6.2, спасибо за предложение. github.com/jhy/jsoup/commit/ - person Jonathan Hedley; 30.08.2011
comment
@JonathanHedley Ты спасаешь жизни! Я не могу отблагодарить вас за вашу тяжелую работу. Ваш код и комментарии идеальны и сэкономили мне часы Google и StackOverflow. - person stackular; 04.02.2014