검색의 첫 번째 결과를 검색하려고합니다. 검색은 xml 파일을 반환하고, 저는 XML을 sax 파서로 처리합니다. 사실 xml 파일을 구문 분석하고 싶습니다. 검색 결과의 첫 번째 결과를 처리하면 멈 춥니 다.그냥 xml 파일의 첫 번째 결과를 검색하십시오.
즉 : 나는이 파일을 구문 분석하고 싶습니다 : http://musicbrainz.org/ws/2/release?query=barcode:606949062927 그리고 첫 번째 결과 (Eminem에서 앨범)를 검색합니다. 하지만 코드를 사용할 때는 마지막 결과 (Daniel Swain의 앨범)를 저장합니다. 원하지 않는 결과입니다. 그래서 첫 번째 결과 이후 파싱을 막을 수 있다면이 방법이 훨씬 더 좋습니다.
부울 값을 firstResult
으로 설정하면 가능하다고 생각하고 첫 번째 결과를 처리하기 위해 완료하면 true로 설정하지만 실제로 더러운 것으로 나타납니다. 다른 방법이 있다고 생각하십니까?
public DataMusic parseBarcode(InputStream is) {
final DataMusic resultAlbum = new DataMusic();
RootElement root = new RootElement(ATOM_NAMESPACE,"metadata");
Element releaseList=root.getChild(ATOM_NAMESPACE,"release-list");
Element release = releaseList.getChild(ATOM_NAMESPACE,"release");
Element title = release.getChild(ATOM_NAMESPACE,"title");
Element artistCredit = release.getChild(ATOM_NAMESPACE,"artist-credit");
Element nameCredit = artistCredit.getChild(ATOM_NAMESPACE,"name-credit");
Element artist = nameCredit.getChild(ATOM_NAMESPACE,"artist");
Element artistName = artist.getChild(ATOM_NAMESPACE, "name");
releaseList.setStartElementListener(new StartElementListener() {
@Override
public void start(Attributes attributes) {
if(attributes.getValue("count").equals(null) || attributes.getValue("count").equals("") || attributes.getValue("count").equals("0")) {
resultAlbum.setMBId(null);
resultAlbum.setAlbumName(null);
resultAlbum.setArtistName(null);
Log.w(TAG_MB, "Album was not found on MB. count=" + attributes.getValue("count") +".");
}
}
});
release.setStartElementListener(new StartElementListener() {
@Override
public void start(Attributes attributes) {
resultAlbum.setMBId(attributes.getValue("id"));
Log.v(TAG_MB, "Album found with id=" + attributes.getValue("id"));
}
});
title.setEndTextElementListener(new EndTextElementListener() {
@Override
public void end(String body) {
Log.v(TAG_MB, "Album name set to " + body);
resultAlbum.setAlbumName(body);
}
});
artistName.setEndTextElementListener(new EndTextElementListener() {
@Override
public void end(String body) {
Log.v(TAG_MB, "Album artist name set to " + body);
resultAlbum.setArtistName(body);
}
});
try {
Log.v(TAG_MB, "Starting parsing data...");
Xml.parse(is, Xml.Encoding.UTF_8, root.getContentHandler());
Log.v(TAG_MB, "Finished parsing. Returning album with MBID=" + resultAlbum.getMBId() + " and name=" + resultAlbum.getAlbumName()) ;
return resultAlbum;
} catch (SAXException e) {
Log.e(TAG_MB + "_SAXException", "SAXException with MusicBrainz");
Log.e(LOGCAT_TAG + "_SAXException",e.getMessage());
} catch (IOException e) {
Log.w(TAG_MB+ "_IOException", "The HTTP Request wasn't good. Either 403 error, or the album wasn't found on LASTFM");
Log.w(LOGCAT_TAG+ "_IOException", "" + e.getMessage(), e);
}
return null;
}
저는 XML 파서를 파싱하거나 작성하는 데 큰 팬이 아닙니다. 나에게 게으른 전화하지만 json 조금 쉬워. xml을 json으로 변환 할 때이 예제를 살펴보십시오. 어쩌면 이것은 당신에게 더 자연 스러울 것입니다. http://answers.oreilly.com/topic/278-how-to-convert-xml-to-json-in-java/ – petey
Hum,이 피드는 json에서도 사용할 수 있으므로 어쩌면 구문 분석을 고려해야합니다. json. json이 xml보다 실제로 더 나은가요? 나에게 그것은 – MagicMicky
다. 안드로이드는 json에 대한 꽤 좋은 아직 간단한 지원을합니다. 또한 데이터 페이로드가 적습니다 (끝 태그가 필요 없음). 당신이 아주 멋있을 필요가있는 경우에 항상 잭슨 json 파서가있다. http://jackson.codehaus.org/ – petey