다음 코드가 있습니다.
public class NewClass {
public String noTags(String str){
return Jsoup.parse(str).text();
}
public static void main(String args[]) {
String strings="<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN \">" +
"<HTML> <HEAD> <TITLE></TITLE> <style>body{ font-size: 12px;font-family: verdana, arial, helvetica, sans-serif;}</style> </HEAD> <BODY><p><b>hello world</b></p><p><br><b>yo</b> <a href=\"http://google.com\">googlez</a></p></BODY> </HTML> ";
NewClass text = new NewClass();
System.out.println((text.noTags(strings)));
}
그리고 결과가 있습니다.
hello world yo googlez
그러나 나는 줄을 끊고 싶다.
hello world
yo googlez
나는 살펴 보았다 jsoup의 TextNode # getWholeText () 하지만 난 그것을 사용하는 방법을 알아낼 수 없습니다.
<br>
구문 분석 한 마크 업에 a 가있는 경우 결과 출력에서 줄 바꿈을 어떻게 얻을 수 있습니까?
답변
줄 바꿈을 유지하는 실제 솔루션은 다음과 같아야합니다.
public static String br2nl(String html) {
if(html==null)
return html;
Document document = Jsoup.parse(html);
document.outputSettings(new Document.OutputSettings().prettyPrint(false));//makes html() preserve linebreaks and spacing
document.select("br").append("\\n");
document.select("p").prepend("\\n\\n");
String s = document.html().replaceAll("\\\\n", "\n");
return Jsoup.clean(s, "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));
}
다음 요구 사항을 충족합니다.
- 원본 HTML에 newline (\ n)이 포함되어 있으면 보존됩니다.
- 원본 html에 br 또는 p 태그가 포함되어 있으면 newline (\ n)으로 변환됩니다.
답변
Jsoup.clean(unsafeString, "", Whitelist.none(), new OutputSettings().prettyPrint(false));
여기에서이 방법을 사용합니다.
public static String clean(String bodyHtml,
String baseUri,
Whitelist whitelist,
Document.OutputSettings outputSettings)
이를 전달함으로써 Whitelist.none()
모든 HTML이 제거되었는지 확인합니다.
패스 new OutputSettings().prettyPrint(false)
를 통해 출력이 다시 형식화되지 않고 줄 바꿈이 유지되는지 확인합니다.
답변
와
Jsoup.parse("A\nB").text();
당신은 출력이 있습니다
"A B"
그리고 아닙니다
A
B
이를 위해 다음을 사용하고 있습니다.
descrizione = Jsoup.parse(html.replaceAll("(?i)<br[^>]*>", "br2n")).text();
text = descrizione.replaceAll("br2n", "\n");
답변
jsoup을 사용하여 이것을 시도하십시오.
public static String cleanPreserveLineBreaks(String bodyHtml) {
// get pretty printed html with preserved br and p tags
String prettyPrintedBodyFragment = Jsoup.clean(bodyHtml, "", Whitelist.none().addTags("br", "p"), new OutputSettings().prettyPrint(true));
// get plain text with preserved line breaks by disabled prettyPrint
return Jsoup.clean(prettyPrintedBodyFragment, "", Whitelist.none(), new OutputSettings().prettyPrint(false));
}
답변
Jsoup v1.11.2에서 이제 Element.wholeText()
.
예제 코드 :
String cleanString = Jsoup.parse(htmlString).wholeText();
user121196's
대답은 여전히 작동합니다. 그러나 wholeText()
텍스트의 정렬을 유지합니다.
답변
더 복잡한 HTML의 경우 위의 솔루션 중 어느 것도 제대로 작동하지 않았습니다. 줄 바꿈을 유지하면서 변환을 성공적으로 수행 할 수있었습니다.
Document document = Jsoup.parse(myHtml);
String text = new HtmlToPlainText().getPlainText(document);
(버전 1.10.3)
답변
주어진 요소를 순회 할 수 있습니다.
public String convertNodeToText(Element element)
{
final StringBuilder buffer = new StringBuilder();
new NodeTraversor(new NodeVisitor() {
boolean isNewline = true;
@Override
public void head(Node node, int depth) {
if (node instanceof TextNode) {
TextNode textNode = (TextNode) node;
String text = textNode.text().replace('\u00A0', ' ').trim();
if(!text.isEmpty())
{
buffer.append(text);
isNewline = false;
}
} else if (node instanceof Element) {
Element element = (Element) node;
if (!isNewline)
{
if((element.isBlock() || element.tagName().equals("br")))
{
buffer.append("\n");
isNewline = true;
}
}
}
}
@Override
public void tail(Node node, int depth) {
}
}).traverse(element);
return buffer.toString();
}
그리고 당신의 코드
String result = convertNodeToText(JSoup.parse(html))