2009-07-06 6 views
2

J'utilise htmlparser (htmlparser.org) pour réécrire tous les liens dans une chaîne en entrée. Tout ce que je dois faire est itérer sur tous les liens (<a href=...), qui apparaissent dans la chaîne d'entrée, saisir leur valeur, effectuer une regex pour déterminer comment ils doivent être manipulés, puis mettre à jour le href de la cible, et onclic les valeurs en conséquence. Je ne suis pas sûr comment exactement je peux mettre à jour seulement les éléments de lien de sélection dans la chaîne d'entrée, laissera intacte toutes les autres données dans la chaîne d'entrée.Comment remplacer les URL des liens en utilisant Java HTMLParser (org.htmlparser)

Il semble que la bibliothèque htmlparser puisse extraire certains éléments pour les manipuler, mais elle ne peut pas manipuler les éléments dans leur contexte d'origine, et le retour de leurs valeurs mises à jour maintient l'intégrité du contexte d'origine.

Toute aide serait grandement appréciée.

Merci

Répondre

2

Ceci est un exemple très simple, mais vous montre comment configurer le nœud iterator.

public static String setExternalLinkTargets(String html) { 
    final NodeVisitor linkVisitor = new NodeVisitor() { 

     @Override 
     public void visitTag(Tag tag) { 
      // Process any tag/node in your HTML 
      String name = tag.getTagName(); 

      // Set the Link's target to _blank if the href is external 
      if ("a".equalsIgnoreCase(name)) { 
       if(isExternalLink(url.getHost()) { 
        tag.setAttribute("target", "_blank"); 
       } 
      } 
     } 
    }; 

    Parser parser = Parser.createParser(html, null); 
    NodeList list; 
    try { 
     list = parser.parse(null); 
     list.visitAllNodesWith(linkVisitor); 
     return list.toHtml(); 
    } catch (ParserException e) { 
     // Could not parse HTML, return original HTML 
     return html; 
    } 
} 
Questions connexes