2012-09-15 46 views
1

超链接我有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 =选择(DIV DIV UL LI)

当我做的foreach XX为y,如果我做

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

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

+0

您的html代码看起来与裸体的div搞砸了。考虑编辑这个并重新发布更有意义,更容易理解的html代码。 –

+0

感谢您的回复我更新了 –

回答

2

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

编辑:
幽州:

然后修正结果通过顺序调用多个选择或链接他们返回你的选择:

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]"); 
+0

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

+0

@ TheLearner:请看最新的编辑。 –

0

这是你的错误:

你的第一选择只得到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.关于您的关注:

and also what is : doc.select(".studentnames > a") ? does this mean that on the ID=studentnames get all the "a" correct???

.是一流的,而#为id。 此外,>直接子

所以您的查询是指:“返回所有的一个标签,它是一个直接孩子拥有类等于‘studentnames’标签的”

对于更具体的了解,你应该检查Jsoup's Selector's document