Мне нужно выбрать теги привязки, присутствующие в теге div, где id = content. Я использовал следующий код в java
Element lin = doc.getElementById("tag#content");
Elements links = lin.select("a[href]");
Но когда я отлаживаю программу lin = Null.
Я также попробовал приведенный ниже код, но lin все еще был нулевым.
Elements lin = doc.select("div#content");
Elements links = lin.select("a[href]");
Это мой HTML:
<div id="content">
<ul class="nolist">
<li><a href="/undergraduate/"><h3>Undergraduate Study</h3></a></li>
<li><a href="/graduate/"><h3>Graduate Study</h3></a></li>
<li><a href="/currentstudents/course/current/"><h3>Courses</h3></a></li>
</ul>
</div>
Любая помощь будет оценена. Спасибо.
Elements links = doc.select("div#content > ul > li > a");
for (Element e : links) {
System.out.println(e.attr("href"));
}
Что будет выводить:
/undergraduate/
/graduate/
/currentstudents/course/current/
Что касается ваших комментариев, я пробовал это:
String html = "<div id='content'><ul class='nolist'><li><a href='/undergraduate/'><h3>Undergraduate Study</h3></a></li><li><a href='/graduate/'><h3>Graduate Study</h3></a></li><li><a href='/currentstudents/course/current/'><h3>Courses</h3></a></li></ul></div>";
Document doc = Jsoup.parse(html);
Elements e = doc.select("div#content a");
System.out.println(e.toString());
Elements f = doc.select("div#content > ul > li > a");
System.out.println(f.toString());
Получил этот вывод:
<a href="/undergraduate/"><h3>Undergraduate Study</h3></a>
<a href="/graduate/"><h3>Graduate Study</h3></a>
<a href="/currentstudents/course/current/"><h3>Courses</h3></a>
<a href="/undergraduate/"><h3>Undergraduate Study</h3></a>
<a href="/graduate/"><h3>Graduate Study</h3></a>
<a href="/currentstudents/course/current/"><h3>Courses</h3></a>
Извините, ребята, я использовал неправильный URL. В приведенном ниже doc.select("div#content a");
работал doc.select("div#content a");
Но doc.select("div#content > ul > li > a");
дает мне повод для каких-либо причин?
<a>
которые происходят от <div id="content">
. Во втором примере выбираются дочерние элементы, которые происходят непосредственно от родителя (или иерархии). Смотрите эту ссылку и читайте о комбинациях селекторов.
Jsoup.parse(html)
в исходном вопросе ( Jsoup.parse(html)
), оба способа работают. Я только что проверил, смотрите мой обновленный ответ.
Вы попытались с этим:
Element lin = doc.getElementById("tag#content");
Element lin = doc.getElementById("tag#content"); Elements links = lin.select("a[href]");
прежнему нулевой. Element lin = doc.getElementById("tag#content"); Elements links = lin.select("a[href]");
Document doc = Jsoup.connect(startLink).get(); Elements links1 = doc.select("div#content > ul > li > a"); for (Element e : links1) { System.out.println(e.attr("href")); }
doc.select("div#content")
дает мне ноль