如何使用Java HTMLParser替换链接的URL(org.htmlparser)

时间:2009-07-06 22:34:10

标签: java html parsing

我正在使用htmlparser(htmlparser.org)重写输入字符串中的所有链接。

我需要做的就是遍历输入String中出现的所有链接标记(<a href=...),获取它们的值,执行一些正则表达式以确定它们应该如何被操作,然后更新链接相应地,href,target和onclick值。

我不确定我究竟只能更新输入字符串中的select链接元素,这会使输入字符串中的所有其他数据保持不变。

似乎htmlparser库可以提取某些元素进行操作,但是它不能在原始上下文中操作元素,然后返回它们更新的值将保持原始上下文的完整性。

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分: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;
    }
}