Jsoup从li获得超链接

时间:2012-09-15 23:42:40

标签: java jsoup

我有

<div id = top1>
   <div id topsub1>
   <ul class="student">
   <li>
    <a href="/thomas">Tom</a>
    </li>
    </div>
   <div id topsub2>
   <ul class="student">
   <li>
    <a href="/thomas1">Tom1</a>
    </li>
    </div>
 </div>

我想获得href和文字 所以我做了 元素xx = select(div div ul li)

当我为y做forex时,如果我做了

string1 = y.text(); //这是打印汤姆 String2 = y.attr(&#34; href&#34;)//这总是空的。我无法得到/托马斯? 我也试过y.attr(&#34; a [href]&#34;))

还有什么: doc.select(&#34; .studentnames&gt; a&#34;);? 这是否意味着在ID = studentnames上得到所有&#34; a&#34;正确???

2 个答案:

答案 0 :(得分:2)

如果您只是Elements eles = doc.select("a[href]");怎么办?另外我相信在使用attrib(...)方法时,您不会传入标记,只传递属性名称本身。

编辑:
你说:

  

做doc.select的问题(“a [href] ..有很多属性和hrefs ..我只想要那个就在学生名字旁边。这就是为什么我在做文本后立即做的事情,以便我可以得到 - 学生的名字和他的网站

然后通过顺序调用多个选择或链接它们来优化select返回的结果:

Elements eles = doc.select("ul.student").select("a[href]");

或者(我从来没有这样做过):

Elements eles = doc.select("ul.student a[href]");

甚至:

Elements eles = doc.select("div > div > ul.student > li > a[href]");

答案 1 :(得分:0)

这是你的错误:

1。您的第一个选择仅获取div div ul li,因此Elements仅包含li个标记。因此,您可以采用以下任一方式:

获取每个元素

for (Element x: yy) {
  Element aTag = x.child(0);
  // or it can be aTag = x.select("a[href]").first();
  // Do your stuff here !
}

从选择查询中获取:

Elements yy = doc.select("div div ul li a[href]");

我想提一下,请不要使用 Element.text() 来获取标记内的数据,因此在这种情况下,它是li。在调试时,您应该使用 Element.html() Elements.html()

<强> 2。关于您的关注:

  

还有什么:doc.select(".studentnames > a")?   这是否意味着在ID = studentnames上得到所有“a”正确???

. 是课程,而 # 是ID。 此外, > 直接孩子

因此,您的查询意味着:“返回所有标记,该标记是类等于'studentnames'的标记的直接子项

有关它的更具体,请检查Jsoup's Selector's document