2016-01-28 197 views
0

我實際上正在Java中開發一個文本解析器,並且我被要求用它解析HTML來增強它。 解析器的目的是將解析的文件分成3個其他文件,一個包含文件中包含的所有單詞,一個包含所有語句,另一個包含所有問題。JSoup - 按標記解析HTML標記

* .txt部分工作正常,但解析HTML時出現問題。

我創建一個擴展名爲* .txt的臨時文件,並通過它在我的文本解析器,但如果我通過與鏈接的HTML文件,該文件是這樣形成的網址:

<!DOCTYPE html> 
    <head> 
     ... some HTML here ... 
    </head> 
    <body> 
     <ul class="some_menu"> 
      <li class="some_menu_item">n1</li> 
      <li class="some_menu_item">n2</li> 
      <li class="some_menu_item">n2</li> 
     </ul> 
     <div> 
      This is a question ? 
      This is a sentence . 
      ... some other text ... 
     </div> 
    </body> 
</html> 

問題文件將充滿了:n1 n2 n3 This is a question

所以,我只是想知道,有沒有一種方法來解析JSoup標籤的標籤,所以我可以添加一個換行每次塊關閉?

如果您需要一些新的信息,請不要問!

編輯:我應該有3個輸出文件,這些文件,在這個例子中:

  1. 一個與所有的話

    n1 
    n2 
    n3 
    This 
    is 
    a 
    question 
    sentence 
    ... some other words ... 
    
  2. 一個與所有的句子

    This is a sentence 
    
  3. 其中包含所有問題

    This is a question 
    

TimmyM

+0

是的,您可以逐個遍歷標籤並單獨獲取文本。但是,我不太明白你在這裏做什麼。你能舉一個你想要的這個HTML的例子嗎? –

回答

0

要獲得一個HTML身體的所有文字,你可以使用:

Document doc = Jsoup.connect(url).get(); 
Elements body = doc.select("body"); 
String allText = body[0].text(); 

然後,您可以拆分文本來獲得每個字分開。 要獲得div標籤的文字,你可以使用:

Elements div = doc.select("div"); 
String divText = div[0].text(); 

您可以再拆divText讓每個句子。

請注意,select查詢的返回類型實際上是Element的列表,即元素。這是因爲可以有多個元素與您的查詢相匹配select。在這種情況下,由於每種情況只有一個元素,我們通過訪問返回數組的索引0來訪問它。

編輯:爲了遍歷所有元素,請檢查answer。基本上

Elements elements = doc.body().select("*"); 

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

雖然可能有沒有文本的元素,所以你可以檢查一下。

+0

這實際上是我現在正在做的,但真正的目的是在我生成的文件上添加一個'\ n'每次我得到一個結束標記。這樣做將允許我的解析器將菜單的文本與實際文本分開。所以我想知道是否沒有通用的方式,所以我可以迭代頁面上的每個標籤 – TimmyMdfck

+0

檢查我的編輯,指向另一個可能在這種情況下幫助你的答案。 –

+0

非常感謝!要檢查一下!乾杯 – TimmyMdfck

-1

有相當市場提供了大量的HTML解析器像

  1. 的HtmlUnit
  2. HTMLCleaner
  3. 傑里科
  4. JSoup

https://en.wikipedia.org/wiki/Comparison_of_HTML_parsers

感謝, Vineet

+1

問題不在於可用的解析器。這是關於如何在Jsoup中完成的。這個答案是完全無關的。 –