【发布时间】:2016-01-14 12:49:08
【问题描述】:
我需要遍历所有带有属性 href 的锚类型标签(这是有效的)。然后如何使用 JSoup 在每个锚点/href 标记之前插入一个 NEW 标记?
编辑:感谢您的回复。我需要澄清一下:我不仅要在 href 标签之前添加新标签,而且还要根据某些条件嵌套这些标签。我如何嵌套这些标签?
【问题讨论】:
-
你能举例说明嵌套标签的含义吗?
我需要遍历所有带有属性 href 的锚类型标签(这是有效的)。然后如何使用 JSoup 在每个锚点/href 标记之前插入一个 NEW 标记?
编辑:感谢您的回复。我需要澄清一下:我不仅要在 href 标签之前添加新标签,而且还要根据某些条件嵌套这些标签。我如何嵌套这些标签?
【问题讨论】:
您可以使用Element before(String html) 方法。
这是一个例子:
String html = "<div><div>Filler 1</div><div>Filler 2</div><a href=\"page.html\"/><div>Filler 3</div></div>";
Document doc = Jsoup.parse(html);
Elements elms = doc.select("a[href]");
for (Element e : elms) {
e.before("<div>Added Now</div>");
}
System.out.println(doc.html());
这将输出:
<html>
<head></head>
<body>
<div>
<div>
Filler 1
</div>
<div>
Filler 2
</div>
<div>
Added Now
</div>
<a href="page.html"></a>
<div>
Filler 3
</div>
</div>
</body>
</html>
【讨论】:
如果您想对节点进行任何操作,请使用以下程序。
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Node;
import org.jsoup.select.NodeVisitor;
public class InsertTagBefore {
public static void main(String... args) {
final String html = "<div><div>Filler 1</div><div>Filler 2</div><a href=\"page.html\"/><div>Filler 3</div></div>";
Document document = Jsoup.parse(html);
document.select("a").forEach(action -> { // Java 8 For Each
action.traverse(new NodeVisitor() {
/**
* method is called at the Start of the node
*
* @param node
* @param depth
*/
@Override
public void head(Node node, int depth) {
node.before("<rama>head");
}
/**
* method is called at the end of the node
*
* @param node
* @param depth
*/
@Override
public void tail(Node node, int depth) {
node.before("</rama>");
}
});
});
System.out.println(document);
}
}
我在锚标记之前插入了节点 rama。
<html>
<head></head>
<body>
<div>
<div>Filler 1</div>
<div>Filler 2</div>
<rama> head </rama>
<a href="page.html"></a>
<div>Filler 3</div>
</div>
</body>
</html>
【讨论】: