2009-07-06 66 views
2

我正在使用htmlparser(htmlparser.org)重新编写输入字符串中的所有链接。如何使用Java HTMLParser替换链接的URL(org.htmlparser)

我所需要做的就是迭代所有出现在输入字符串中的链接标记(<a href=...),获取它们的值,执行一些正则表达式来确定它们应该如何操作,然后更新链接的href,target并相应地点击值。

我不知道我只能更新输入字符串中的select链接元素,不会改变输入字符串中的所有其他数据。

看起来好像htmlparser库可以提取某些操作元素,但它不能操纵原始上下文中的元素,然后返回它们的更新值将保持原始上下文的完整性。

任何帮助将不胜感激。

感谢

回答

2

这是一个非常简单的例子,但说明了如何设置节点迭代器。

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