Как выбрать прямой дочерний элемент "этого элемента" в 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