我有
<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;正确???
答案 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'的标记的直接子项/ EM>
有关它的更具体,请检查Jsoup's Selector
's document