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

标签 java html parsing

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

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

我不确定如何才能只更新输入字符串中的选择链接元素,而不影响输入字符串中的所有其他数据。

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

如有任何帮助,我们将不胜感激。

谢谢

最佳答案

这是一个非常简单的示例,但向您展示了如何设置节点迭代器。

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

关于java - 如何使用 Java HTMLParser (org.htmlparser) 替换链接的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1089517/

相关文章:

java - 您的 SQL 语法有错误;检查与您的 MySQL 服务器对应的手册

java - 什么是 NullPointerException,我该如何解决?

java - Eclipse 无法从 Java 8 流中推断出正确的类型

html - 为什么我不能对齐我的文字和按钮?

java - 将此 String 转换为 int 的最佳方法

json - 如何使用 Swift Decodable 协议(protocol)解析 JSON API 结构中的几个硬编码键?

java - 从网络摄像头代码将图片上传到 Twitter 每次都上传相同的照片

javascript - 上传前在页面上预览图像,适用于除 IE 之外的所有浏览器

python - 在 python 中很好地解析多行配置文件

javascript - 一个页面上的多个 Iframe 加载问题