【问题标题】:Jsoup div[class=] syntax works whereas div.class syntax doesn't - Why?Jsoup div[class=] 语法有效,而 div.class 语法无效 - 为什么?
【发布时间】:2011-11-25 11:33:51
【问题描述】:

对于以下 HTML sn-p:

<div class="class_one class_two class_three classfour classfive classsix">
some inner content
</div>

以下 Jsoup 选择器有效

div[class=class_one class_two class_three classfour classfive classsix]

但等效的 div.class 语法不起作用

div.class_one.class_two.class_three.classfour.classfive.classsix

为什么?我错过了什么?

编辑:根据我在下面收到的反馈,我意识到我未能解释“不起作用”的含义。这是由于我对多类选择语法的工作原理感到困惑。 “不起作用”是指上面的 .classname 语法选择的 div 比 class=classname 语法(具有相同数量的类名和相同的顺序!)选择的 div 太多,因为有问题的 HTML 包含额外的 div带有第 7 个类名...原来这是by design。这就是我所缺少的,感谢@Hovercraft Full Of Eels 和帮助我发现这一点的@BalusC。

【问题讨论】:

  • 应该可以。你可以只用两门课试试吗?
  • 您是否有要分析的公共网页并且可以在此处提供链接?您能否提供一个小型可编译和可运行程序(sscce)来演示您的问题?

标签: java html-parsing jsoup


【解决方案1】:

再次,根据我的评论,您需要在上下文中向我们展示您的代码,以说明它是如何不工作的。

例如,当我尝试分析这个简单的文本时:

<html>
 <head></head>
 <body>
  <div class="class_one class_two class_three classfour classfive classsix">
    some inner content 
  </div> 
 </body>
</html>

使用此代码:

import java.io.IOException;
import java.util.Scanner;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class Foo {
   public static void main(String[] args) throws IOException {
      Scanner scan = new Scanner(Foo.class.getResourceAsStream("Foo.txt"));
      String text = "";
      while (scan.hasNextLine()) {
         text += scan.nextLine() + "\n";
      }
      Document doc = Jsoup.parse(text);

      Elements eles = doc.select("div.class_one.class_two.class_three.classfour.classfive.classsix");
      System.out.println(eles);
   }
}

我得到这个结果:

<div class="class_one class_two class_three classfour classfive classsix">
  some inner content 
</div>

建议您使用 select 应该 工作,如果它不工作,可能会发生其他事情。你最好的选择可能是做我刚刚做的事情:发布一些数据和一些可编译的可运行代码(SSCCE)并让它显示你的代码是如何不工作的。

【讨论】:

  • 提示:Jsoup 还有一个parse() 方法,采用InputStream。您可以按如下方式使用它:Jsoup.parse(Foo.class.getResourceAsStream("Foo.txt"), "UTF-8", null);
  • @Hovercraft Full Of Eels 感谢 +1 并为迟到的反馈感到抱歉。请参阅我的 OP 中的 EDIT。
猜你喜欢
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 2023-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多