簡體   English   中英

用Jsoup保留行

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM