Как выбрать прямой дочерний элемент "этого элемента" в JSoup
если у меня есть элемент, который выглядит так:
<foo>
<bar> bar text 1 </bar>
<baz>
<bar> bar text 2 </bar>
</baz>
</foo>
и у меня уже есть <foo> элемент выбран, и я хочу, чтобы выбрать <bar> элемент, который является прямым потомком <foo> но не тот, который является ребенком <baz> как мне указать это?
Element foo = <that thing above>
foo.select("bar").text();
доходность "bar text 1 bar text 2"
что я хочу, это что-то вроде
foo.select("this > bar").text();
вопрос: как указать "этот элемент"!--21--> в селектор?
обратите внимание, что нужные bar может быть, не первый - мне нужно решение, которое также будет работать для:
<foo>
<baz>
<bar> bar text 2 </bar>
</baz>
<bar> bar text 1 </bar>
</foo>
2 ответов
использовать :root структурный псевдоэлемент, чтобы указать "этот элемент". От Element.select Javadoc, мы видим select использует " этот элемент в качестве начального контекста "и может соответствовать" этому элементу или любому из его дочерних элементов"; то есть :root ссылается на этот элемент, а не сам корень документа. Следующий код демонстрирует размещение второго примера в некоторых внешних тегах:
//nest your second sample in some fake outer html body
Element html = (Element)Parser.parseFragment("<html><body><foo>\n" +
" <baz>\n" +
" <bar> bar text 2 </bar>\n" +
" </baz>\n" +
" <bar> bar text 1 </bar>\n" +
"</foo></body></html>", null, "http://example.com").get(0);
Element foo = html.select("foo").first();
System.out.println(foo.select(":root > bar"));
этот код выводит
<bar>
bar text 1
</bar>
правильно прыгать вложенные bar элемент.
по словам журнал изменений Jsoup, структурная поддержка псевдо-элемента была добавлена в 1.7.2.
Я считаю, что вы хотите:
foo.select("> bar").text();
см. jsoup селекторы страницы :
E > F an F direct child of E