2016-01-28 121 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中完成的。这个答案是完全无关的。 –