use of org.jsoup.nodes.Node in project jsoup by jhy.
the class ElementsTest method traverse.
@Test
public void traverse() {
Document doc = Jsoup.parse("<div><p>Hello</p></div><div>There</div>");
final StringBuilder accum = new StringBuilder();
doc.select("div").traverse(new NodeVisitor() {
public void head(Node node, int depth) {
accum.append("<" + node.nodeName() + ">");
}
public void tail(Node node, int depth) {
accum.append("</" + node.nodeName() + ">");
}
});
assertEquals("<div><p><#text></#text></p></div><div><#text></#text></div>", accum.toString());
}
use of org.jsoup.nodes.Node in project jsoup by jhy.
the class NodeTraversor method traverse.
/**
* Start a depth-first traverse of the root and all of its descendants.
* @param root the root node point to traverse.
*/
public void traverse(Node root) {
Node node = root;
int depth = 0;
while (node != null) {
visitor.head(node, depth);
if (node.childNodeSize() > 0) {
node = node.childNode(0);
depth++;
} else {
while (node.nextSibling() == null && depth > 0) {
visitor.tail(node, depth);
node = node.parentNode();
depth--;
}
visitor.tail(node, depth);
if (node == root)
break;
node = node.nextSibling();
}
}
}
use of org.jsoup.nodes.Node in project sppanblog4springboot by whoismy8023.
the class HtmlFilter method truncateHTML.
/**
* 使用Jsoup预览
*
* @param source 需要过滤的
* @param dest 过滤后的对象
* @param len 截取字符长度
* <p>
* Document dirtyDocument = Jsoup.parse(sb.toString());<br />
* Element source = dirtyDocument.body();<br />
* Document clean = Document.createShell(dirtyDocument.baseUri());<br />
* Element dest = clean.body();<br />
* int len = 6;<br />
* truncateHTML(source,dest,len);<br />
* System.out.println(dest.html());<br />
*/
private static void truncateHTML(Element source, Element dest, int len) {
List<Node> sourceChildren = source.childNodes();
for (Node sourceChild : sourceChildren) {
if (sourceChild instanceof Element) {
Element sourceEl = (Element) sourceChild;
Element destChild = createSafeElement(sourceEl);
int txt = dest.text().length();
if (txt >= len) {
break;
} else {
len = len - txt;
}
dest.appendChild(destChild);
truncateHTML(sourceEl, destChild, len);
} else if (sourceChild instanceof TextNode) {
int destLeng = dest.text().length();
if (destLeng >= len) {
break;
}
TextNode sourceText = (TextNode) sourceChild;
int txtLeng = sourceText.getWholeText().length();
if ((destLeng + txtLeng) > len) {
int tmp = len - destLeng;
String txt = sourceText.getWholeText().substring(0, tmp);
TextNode destText = new TextNode(txt, sourceChild.baseUri());
dest.appendChild(destText);
break;
} else {
TextNode destText = new TextNode(sourceText.getWholeText(), sourceChild.baseUri());
dest.appendChild(destText);
}
}
}
}
use of org.jsoup.nodes.Node in project flow by vaadin.
the class TemplateParser method collectIncludeNodes.
private static List<TextNode> collectIncludeNodes(Element element) {
List<TextNode> includeNodes = new ArrayList<>();
new NodeTraversor(new NodeVisitor() {
@Override
public void head(Node node, int depth) {
// nop
}
@Override
public void tail(Node node, int depth) {
if (node instanceof TextNode) {
TextNode textNode = (TextNode) node;
String text = textNode.getWholeText();
if (text.contains(INCLUDE_PREFIX)) {
includeNodes.add(textNode);
}
}
}
}).traverse(element);
return includeNodes;
}
use of org.jsoup.nodes.Node in project flow by vaadin.
the class DefaultTemplateParser method removeCommentsRecursively.
private static void removeCommentsRecursively(Node node) {
int i = 0;
while (i < node.childNodes().size()) {
Node child = node.childNode(i);
if (child instanceof Comment) {
child.remove();
} else {
removeCommentsRecursively(child);
i++;
}
}
}
Aggregations