[英]Preserving lines with Jsoup
我正在使用Jsoup從html獲取一些數據,我有以下代碼:
System.out.println("nie jest");
StringBuffer url=new StringBuffer("http://www.darklyrics.com/lyrics/");
url.append(args[0]);
url.append("/");
url.append(args[1]);
url.append(".html");
//wyciaganie odpowiednich klas z naszego htmla
Document doc=Jsoup.connect(url.toString()).get();
Element lyrics=doc.getElementsByClass("lyrics").first();
Element tracks=doc.getElementsByClass("albumlyrics").first();
//Jso
//lista sciezek
int numberOfTracks=tracks.getElementsByTag("a").size();
一切都很好,我提取了我想要的數據,但是當我這樣做時:
lyrics.text()
我得到的文本沒有換行符,所以我想知道如何在顯示的文本中保留換行符,我在此問題上閱讀了stackoverflow上的其他線程,但它們沒有幫助,我嘗試執行以下操作:
TextNode tex=TextNode.createFromEncoded(lyrics.text(), lyrics.baseUri());
但我無法通過換行符獲得想要的文本。 我看着以前的線程,例如, 在使用JSoup保留換行符的同時刪除HTML實體,但我無法獲得想要的效果。 我該怎么辦?
編輯:我得到了想要的效果,但我認為這不是很好的解決方案:
for (Node nn:listOfNodes)
{
String s=Jsoup.parse(nn.toString()).text();
if ((nn.nodeName()=="#text" || nn.nodeName()=="h3"))
{
buf.append(s+"\n");
}
}
有人有更好的主意嗎?
您可以通過檢查文本節點是否為TextNode
的實例來獲取文本節點(在<br />
之間的文本)。 這應該為您解決:
Document document = Jsoup.connect(url.toString()).get();
Element lyrics = document.select(".lyrics").first();
StringWriter buffer = new StringWriter();
PrintWriter writer = new PrintWriter(buffer);
for (Node node : lyrics.childNodes()) {
if (node.nodeName().equals("h3")) {
writer.println(((Element) node).text());
} else if (node instanceof TextNode) {
writer.println(((TextNode) node).text());
}
}
System.out.println(buffer.toString());
(請注意,應該使用equals()
方法而不是==
來比較對象的內部值;字符串是對象,而不是基元)
哦,我還建議您閱讀他們的隱私政策 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.