[英]Jsoup.parse().text() add not desired whitespace
我试图清理一个字符串,从其中删除所有html标记,所以这是我的代码:
System.out.println("Result:" + Jsoup.parse("Dani<div></div>el").text());
结果是
Result:Dani el
相反应该是Result:Daniel
按照Jsoup代码,我发现此方法中的“问题”在org.jsoup.nodes.Element中:
public String text() {
final StringBuilder accum = new StringBuilder();
new NodeTraversor(new NodeVisitor() {
public void head(Node node, int depth) {
if (node instanceof TextNode) {
TextNode textNode = (TextNode) node;
appendNormalisedText(accum, textNode);
} else if (node instanceof Element) {
Element element = (Element) node;
if (accum.length() > 0 &&
(element.isBlock() || element.tag.getName().equals("br")) &&
!TextNode.lastCharIsWhitespace(accum))
accum.append(" ");
}
}
public void tail(Node node, int depth) {
}
}).traverse(this);
return accum.toString().trim();
}
在某个时候有accum.append(" ");
。 很明显,在某些情况下,一个html块标记在相应的文本版本中添加一个空格很方便; 但在某些情况下,这是不正确的。 就我而言,结果是错误的。
我觉得这是很好的文本()方法有一个boolean参数preserveWhiteSpaces
是启用或禁用该行的执行accum.append(" ");
。 我希望Jsoup的某些开发人员可以考虑此请求:我看到其他人也对空白存在此问题。
如果有人有一个好主意来解决问题而不进行更改,那么欢迎使用Jsoup来源。
我正在尝试清理一个字符串,从中删除所有html标签,
您要使用clean()
方法。
System.out.println("Result:" + Jsoup.clean("Dani<div></div>el", Whitelist.none()));
Result:Daniel
在我看来,结果是错误的。 您是否有解决此问题的建议?
您可以使用自定义NodeVisitor
实例化NodeTraversor
。
只是给你一个想法:
private static String toText(Element element) {
final StringBuilder accum = new StringBuilder();
new NodeTraversor(new NodeVisitor() {
public void head(Node node, int depth) {
if (node instanceof TextNode) {
TextNode textNode = (TextNode) node;
accum.append(textNode.getWholeText());
} else if (node instanceof Element) {
// Do nothing ...
}
}
public void tail(Node node, int depth) {
}
}).traverse(element);
return accum.toString().trim();
}
public static void main(String[] args) {
System.out.println("Result:" + toText(Jsoup.parse("Dani<div></div>el")));
}
Result:Daniel
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.