我正在使用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上读了关于此问题的其他线程,但是它们没有帮助,我试着这样做:< / p>
TextNode tex=TextNode.createFromEncoded(lyrics.text(), lyrics.baseUri());
但我无法通过换行符获得我想要的文字。我看过以前关于此的主题, Removing HTML entities while preserving line breaks with JSoup 但我无法得到我想要的效果。我该怎么办?
编辑:我得到了我想要的效果,但我不认为这是非常好的解决方案:
for (Node nn:listOfNodes)
{
String s=Jsoup.parse(nn.toString()).text();
if ((nn.nodeName()=="#text" || nn.nodeName()=="h3"))
{
buf.append(s+"\n");
}
}
有人有更好的主意吗?
答案 0 :(得分:1)
您可以通过检查节点是否是<br />
的实例来获取文本节点(TextNode
之间的文本)。这应该适合你:
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()
方法完成,而不是==
;字符串是对象,而不是基元
哦,我还建议阅读他们的privacy policy。