2011-09-26 26 views
2

對於以下HTML片段:Jsoup div [class =]語法有效,而div.class語法不會 - 爲什麼?

<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 

爲什麼?我錯過了什麼?

編輯:基於下面我收到的反饋,我意識到,我無法解釋什麼是「不工作」的意思。這是因爲我對混合選擇語法的工作原理感到困惑。通過「not working」,我的意思是上面的.classname語法選擇了太多的div,而不是class=classname語法(具有相同的確切數量的類名,並且順序相同!),因爲所討論的HTML包含了第7個類的附加div名字......事實證明,這是by design。這就是我所缺少的,並感謝@Hovercraft Full Of Eels和@BalusC,他們幫助我發現了這一點。

+0

這應該工作。你能用兩節課來嘗試嗎? –

+0

你有一個公共網頁,你試圖分析,並可以在這裏提供一個鏈接?你還可以提供一個小的可編譯和可運行的程序([sscce](http://sscce.org))來證明你的問題? –

回答

4

再次,根據我的評論,您需要向我們展示您的代碼在上下文中顯示它如何不工作。

例如,當我試圖分析這種簡單的文字:

<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> 

暗示您的使用選擇應該工作,如果它不工作,索姆其他事情可能正在發生。你最好的選擇可能是做我剛剛做的事情:發佈一些數據和一些可編譯的可運行代碼(SSCCE),並讓它顯示你的代碼是如何工作的。

+1

提示:Jsoup還有一個採用'InputStream'的'parse()'方法。你可以像下面這樣使用它:'Jsoup.parse(Foo.class.getResourceAsStream(「Foo.txt」),「UTF-8」,null);' – BalusC

+0

@Hovercraft Full Of Eels感謝+1並對延遲反饋感到抱歉。請參閱我的OP中的編輯。 – ef2011

相關問題