2010-04-26 7 views
1

Comment gérer les balises de fermeture (ex: </h1>) avec la bibliothèque d'analyseurs HTML HTML?Analyseur Html Java et étiquettes de fermeture

Par exemple, si je donne les résultats suivants:

public class MyFilter implements NodeFilter { 

public boolean accept(Node node) { 
    if (node instanceof TagNode) { 
    TagNode theNode = (TagNode) node; 
    if (theNode.getRawTagName().equals("h1")) { 
    return true; 
    } else { 
    return false; 
    } 
    } 
    return false; 
} 
} 

public class MyParser { 
public final String parseString(String input) { 
    Parser parser = new Parser(); 
    MyFilter theFilter = new MyFilter(); 
    parser.setInputHTML("<h1>Welcome, User</h1>"); 
    NodeList theList = parser.parse(theFilter); 
    return theList.toHtml(); 
} 
} 

Quand je lance mon analyseur, je reçois la sortie suivante retour:

<h1>Welcome, User</h1>Welcome, User</h1> 

Le NodeList contient une liste de taille 3 avec la entités suivantes:

(tagNode) <h1> 

(textNode) Welcome, User 

(tagNode) </h1> 

Je voudrais que la sortie soit "<h1>Welcome, User</h1>". Est-ce que quelqu'un voit ce qui ne va pas dans mon exemple d'analyseur? Je pense que

vous devez compter sur isEndTag() API dans ce cas:

Répondre

0

Hint.

0

Votre filtre accepte trop de nœuds. Pour votre exemple d'entrée, vous voulez créer un NodeList qui n'a qu'un seul nœud - pour la balise <h1>. Les deux autres nœuds sont enfants de ce premier nœud et ne doivent donc pas être ajoutés au NodeList.


Si vous ajoutez le code suivant, vous pouvez voir mieux quel est le problème.

for (Node node : theList.toNodeArray()) 
{ 
    System.out.println(node.toHtml()); 
} 

Il faut imprimer

<h1>Welcome, User</h1> 
Welcome, User 
</h1>