我正在使用JAVA的last.fm API,可以在这里找到。
我有一个巨大的数据集,其中我仅使用包含用户艺术家历史和播放的文件。我用 Java 编写了一段代码,它提取这些艺术家姓名并根据
Artist.getSimilar()
方法返回相似的艺术家。
我运行过一次,但不是针对所有艺术家。我调试到一半就终止了。然而下一次,我的结果将从缓存返回,不再将请求发送到网络服务器。问题是,这次我只能得到结果,直到我终止结果的艺术家为止。我尝试使用另一种方法来处理
artists=Artist.getTopAlbums()
,我中途终止并在下次遇到同样的问题。我收到的错误是:
[Fatal Error] :513:9: <strong>XML document structures must start and end within the same entity.</strong>
Exception in thread "main" de.umass.lastfm.CallException: org.xml.sax.SAXParseException; lineNumber: 513; columnNumber: 9; XML document structures must start and end within the same entity.
Caused by: org.xml.sax.SAXParseException; lineNumber: 513; columnNumber: 9; XML document structures must start and end within the same entity.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
还有一堆其他例外,这不是这里的重要部分。
我尝试重新安装 Eclipse,以
-clean
模式启动 Eclipse 并清理工作区。什么都没起作用。我也创建了一个新的工作区,但缓存不断恢复。我正在使用 Eclipse 3.8 。也许清除 Eclipse 中缓存的有效方法会有所帮助?我该怎么做呢。似乎什么都不起作用。 (此外,没有像许多文章中建议的那样在“窗口”>“首选项”中手动清理缓存的选项)。
或者我需要做点别的吗?非常感谢任何帮助。预先感谢。
我的java代码(工作得很好,没有错误):
//in main
BufferedReader inp = new BufferedReader (new InputStreamReader(System.in));
String sinput=inp.readLine();
System.out.println(sinput+"\t \t \t"+getSimilarartists(sinput));
//to fetch similar artists
public static StringBuilder getSimilarartists(String artist){
String key = "af2bfbcb4dd49870fdb8e92f128f4ff7";
StringBuilder sb = new StringBuilder();
String art=(Artist.getSimilar(artist, key)).toString();
int i=0;
while(i<art.length()-5){
if((art.substring(i, (i+4))).equalsIgnoreCase("name")){
i=i+6;
while(art.charAt(i)!='\''){
sb.append(art.charAt(i));
i++;
}
break;
}
i++;
}
return sb;
}
输出(仅最后几行):
hans zimmer; I recommend=Hans Zimmer & James Newton Howard<br>
nelly furtado; I recommend=Jennifer Lopez<br>
madonna; I recommend=Kylie Minogue<br>
blink-182; I recommend=Box Car Racer<br>
dave gahan; I recommend=Depeche Mode<br>
kelly clarkson; I recommend=Carrie Underwood<br>
lucie silvas; I recommend=Delta Goodrem<br>
natalie imbruglia; I recommend=Melanie C<br>
michelle branch; I recommend=The Wreckers<br>
delta goodrem; I recommend=Ricki-Lee<br>
new order; I recommend=Electronic<br>
seal; I recommend=Simply Red<br>
atomic kitten; I recommend=Liberty X
*** (this is where I had terminated my previous run) ***
[Fatal Error] :513:9: XML document structures must start and end within the same entity.<br>
Exception in thread "main" de.umass.lastfm.CallException: org.xml.sax.SAXParseException; lineNumber: 513; columnNumber: 9; XML document structures must start and end within the same entity.
at de.umass.lastfm.Caller.call(Caller.java:268)<br>
at de.umass.lastfm.Caller.call(Caller.java:189)<br>
at de.umass.lastfm.Caller.call(Caller.java:185)<br>
at de.umass.lastfm.Artist.getSimilar(Artist.java:144)<br>
at de.umass.lastfm.Artist.getSimilar(Artist.java:132)<br>
at Recommender.getSimilarartists(Recommender.java:89)<br>
at Recommender.main(Recommender.java:58)<br>
Caused by: org.xml.sax.SAXParseException; lineNumber: 513; columnNumber: 9; XML document structures must start and end within the same entity.<br>
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251)
at <br>
com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)<br>
at de.umass.lastfm.Caller.createResultFromInputStream(Caller.java:324)<br>
at de.umass.lastfm.Caller.call(Caller.java:256)<br>
... 6 more
此类错误通常表示文档格式错误:
由:org.xml.sax.SAXParseException引起;行号:513; 列数:9; XML 文档结构必须在 同一实体。在
您可以采取一些措施来调试此问题:
在执行常规 I/O 时,Eclipse 和 Java 都不会缓存 Web 内容。不过,内容可以缓存在其他地方。也许您正在使用的 de.umass.lastfm API 正在执行此操作。也许您的操作系统或网络中有某些东西。
我有同样的错误,但就我而言,问题是代码中未关闭的
// <!CDATA[
部分。关闭该部分修复了错误。