[英]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.