我正在使用htmlparser(htmlparser.org)重写输入字符串中的所有链接。
我需要做的就是遍历输入String中出现的所有链接标记(<a href=...
),获取它们的值,执行一些正则表达式以确定它们应该如何被操作,然后更新链接相应地,href,target和onclick值。
我不确定我究竟只能更新输入字符串中的select链接元素,这会使输入字符串中的所有其他数据保持不变。
似乎htmlparser库可以提取某些元素进行操作,但是它不能在原始上下文中操作元素,然后返回它们更新的值将保持原始上下文的完整性。
非常感谢任何帮助。
由于
答案 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;
}
}