2014-02-10 54 views
2

如何使用JSoup按標籤獲取元素(http://jsoup.org/)?如何使用JSoup按標籤獲取元素? - java

我有以下的輸入,並要求下面的輸出,但我沒有得到<source>...<\source>標籤內的文本:

[在:]

<html> 
    <something> 
    <source>foo bar bar</source> 
    <something> 
    <source>foo foo bar</source> 
</html> 

[所需出來:]

foo bar bar 
foo foo bar 

我試過這個:

import java.io.*; 
import java.util.List; 

import org.apache.commons.io.IOUtils; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 

public class HelloJsoup { 
    public static void main(String[] args) throws IOException { 

     String br = "<html><source>foo bar bar</source></html>"; 
     Document doc = Jsoup.parse(br); 
     //System.out.println(doc); 
     for (Element sentence : doc.getElementsByTag("source")) 
      System.out.print(sentence); 

    } 
} 

但它輸出:

<source></source> 

回答

3

您需要使用xmlParser(),您可以在傳遞給parse()方法:

String br = "<html><source>foo bar bar</source></html>"; 
Document doc = Jsoup.parse(br, "", Parser.xmlParser()); 

for (Element sentence : doc.getElementsByTag("source")) 
    System.out.println(sentence.text()); 

} 

更多關於這方面的文檔:http://jsoup.org/apidocs/org/jsoup/parser/Parser.html#xmlParser()

+0

感謝它的工作原理,但爲什麼添加xmlParser的工作? – alvas

+2

''標記是HTML5中的新標記,它看起來像Jsoup無法通過常規的HTML解析來處理它(它必須嘗試使用​​已知的HTML標記驗證它並失敗)。通過使用xmlParser,您可以解析任何標籤(因爲XML可以具有任意標籤名稱)。 Jsoup不會嘗試將XML文檔驗證爲HTML,而只是基於文檔中的任何一組標籤創建樹。 – ashatte