1

我有

<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 和 text 所以我做了 Elements xx= select (div div ul li)

当我为 y 做 foreach xx 时,如果我这样做了

string1= y.text(); //这是打印 Tom String2= y.attr("href") //这总是空的。我无法获得 /thomas?我也试过 y.attr("a[href]"))

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

4

2 回答 2

2

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

编辑:
你说:

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

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

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]");
于 2012-09-16T00:20:34.793 回答
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()is 来获取标签内的数据,所以在这种情况下,它是li. 调试时,您应该使用Element.html()or Elements.html()

2. 关于您的担忧:

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

.是类,而是#id。再者,>直子

因此,您的查询意味着:“返回所有 a 标签,它是具有类等于 'studentnames'的标签的直接子标签”

有关它的更具体的信息,您应该查看Jsoup 的Selector文档

于 2012-09-17T10:41:51.993 回答