【问题标题】:Selecting Elements that have multiple class whilst using JSoup在使用 JSoup 时选择具有多个类的元素
【发布时间】:2014-03-08 18:55:09
【问题描述】:

我正在解析网站上的一些表格,特别是我正在尝试按类名提取以下单元格:

Elements e=d.select("span[class=bld lrg red]");

for (Element element : e) {
System.out.println(element.text());}

这段代码给了我一些在网站上以价格给出的值。但在某些情况下,我想从不同的班级而不是"span[class=bld lrg red]" 获取价格。

我的意思是“bld lrg red”类是空的,然后我想从“span[class=price]”中获取价值

在这种情况下,我如何使用“或”。我的意思是,如果“bld lrg red”类具有价值,则采用该价格或采用“价格”类价值。

【问题讨论】:

  • 页面可以同时包含span[class=bld lrg red]span[class=price] 元素吗?如果没有,那么您可以尝试使用span[class=bld lrg red], span[class=price]。否则你会找到他们两个。

标签: java html json jsoup


【解决方案1】:

您也可以使用regex 从您的网页中选择所需的元素,也可以使用jsoup,在那里您可以使用“或”条件来指定您要查找的内容;

例子:

Elements e = d.select("span[class~=(?i)(bld lrg red|price)]");

上述正则表达式将选择您的span 元素,其中classselector 直接匹配bld lrg redprice(不区分大小写)。

详情参考这里:http://jsoup.org/apidocs/org/jsoup/select/Selector.html

现在您可能想要遍历元素并选择不为空、不为空的元素,等等。

编辑:根据 cmets,price class 不属于 span 元素。要克服它,您可以使用:

Elements e = d.select("span[class=bld lrg red],del[class=price]");

【讨论】:

  • 如果两者都是 span 类,这将起作用。但在这种情况下,一个类是 ,另一个是 。那么我将如何使用这个方法呢?
  • @sarath 是的,在您的问题中,您指定两者都是具有更改类值的 span 元素
  • @sarath 检查上面的编辑,您可以单独指定两个元素,这是一个有效的“或”
  • 感谢 PopoFibo .. 这很好用.. 感谢您的帮助.. 现在我都得到了...所以我可以使用许多使用逗号(,)的类,就像上面给出的示例一样。
  • 仍然存在问题。如果其中一个类有价格,那么我不需要另一个类的值。例如,你看到一些网站有原价,然后是同一产品的折扣价。考虑原价在“bld lrg red”中,折扣价在“价格”中。但对于所有产品,不会有任何折扣。因此,如果“价格”可用,则采用该值,如果没有“价格值”,则采用“bld lrg red”。现在在上面的示例中,每个产品都显示了两个值。希望您理解问题..
猜你喜欢
  • 2011-09-03
  • 2016-08-16
  • 2015-10-05
  • 2011-09-23
  • 1970-01-01
  • 2015-02-19
  • 1970-01-01
  • 2011-11-30
相关资源
最近更新 更多