2017-01-28 1 views
1

J'ai un html:Comment obtenir du texte orphelin avec Jsoup?

<span>This is the first text</span> 
More text here 
Another line of text 
<span>Text in the span</span> 
<span>Another text in span</span> 
This is another line 

Je veux obtenir tous les textes dans l'ordre, quelque chose comme ce tableau:

[ 
"Span:This is the first text", 
"More text here", 
"Another line of text", 
"Span:Text in the span", 
"Span:Another text in span", 
"This is another line", 
] 

Répondre

1

Je voudrais aller avec une méthode récursive qui prend votre balise de départ et itère sur ses nœuds enfants. Pour chaque TextNode, imprimez le contenu. Pour chaque élément, vérifiez-le pour les nœuds enfants.

public static void main(String[] args) throws ParseException, IOException 
{ 
    //I put your HTML in the body tag in a local file 
    Document doc = Jsoup.parse(new File("input/20160505.html"), "UTF-8"); 
    Elements elements = doc.getElementsByTag("body"); 
    Element rootTag = elements.get(0); 
    printTextOfTag(rootTag); 
} 

public static void printTextOfTag(Element currentTag) 
{ 
    List<Node> nodes = currentTag.childNodes(); 
    for(Node n : nodes) 
    { 
     if(n instanceof TextNode) 
     { 
      System.out.println(((TextNode)n).text()); 
     } 
     else if(n instanceof Element) 
     { 
      printTextOfTag((Element)n); 
     } 
    } 
} 

sortie

This is the first text 

More text here Another line of text 

Text in the span 



Another text in span 

This is another line