2009-07-06 10 views
2

Ich verwende htmlparser (htmlparser.org), um alle Links in einem Eingabe-String neu zu schreiben.So ersetzen Sie URLs von Links mit Java HTMLParser (org.htmlparser)

Alles, was ich tun muss, iterieren über alle Link-Tags (<a href=...), die in der Eingabezeichenfolge erscheinen, greifen ihren Wert, führen einige Regex, um zu bestimmen, wie sie manipuliert werden sollen, und aktualisieren dann das Link href, Ziel und onclick Werte entsprechend.

Ich bin nicht sicher, wie genau ich nur die Select-Link-Elemente in der Eingabe String aktualisieren kann, wird alle anderen Daten in der Eingabe String unberührt lassen.

Es scheint, als ob die htmlparser-Bibliothek bestimmte Elemente zur Manipulation extrahieren kann, aber sie kann Elemente in ihrem ursprünglichen Kontext nicht manipulieren, und die dann zurückgegebenen aktualisierten Werte behalten die Integrität des ursprünglichen Kontextes bei.

Jede Hilfe würde sehr geschätzt werden.

Dank

Antwort

2

Dies ist ein sehr einfaches Beispiel, aber sehen Sie, wie der Iterator Knoten einrichten.

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; 
    } 
}