안드로이드 개발 질문/답변
(글 수 45,052)
풀파서로 xml파일을 파싱하는데
첫 줄 : <?xml version="1.0" encoding="utf-8" ?> 이 문장앞에 공백이나 위에 빈 줄이 있으면 에러가 납니다.
eventType = parser.next(); 요부분에서 에러가 나더라고요...
while문으로 진입해 XmlPullParser.START_DOCUMENT: 가 선택된 후에 에러가 납니다...
공백을 지우면 해결되지 않느냐 라고 할 수 있지만 웹상에 있는 파일을 불러오는거라서 제가 어떻게 할 수가 없네요...
코드는
while (eventType != XmlPullParser.END_DOCUMENT && !done){
String name = null;
switch (eventType){
case XmlPullParser.START_DOCUMENT:
mList = new ArrayList<Message>();
break;
case XmlPullParser.START_TAG:
name = parser.getName();
if (name.equalsIgnoreCase("item")){
currentMessage = new Message();
} else if (currentMessage != null){
if (name.equalsIgnoreCase("item_id")){
currentMessage.setItemId(parser.nextText());
} else if (name.equalsIgnoreCase("category")){
currentMessage.setCategory(parser.nextText());
} else if (name.equalsIgnoreCase("category_id")){
currentMessage.setCategoryId(parser.nextText());
} else if (name.equalsIgnoreCase("publisher")){
currentMessage.setPublisher(parser.nextText());
} else if (name.equalsIgnoreCase("title")) {
currentMessage.setTitle(parser.nextText());
} else if (name.equalsIgnoreCase("date")) {
currentMessage.setDate(parser.nextText());
} else if (name.equalsIgnoreCase("url")) {
currentMessage.setDetailUrl(parser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
name = parser.getName();
if (name.equalsIgnoreCase("item") && currentMessage != null){
mList.add(currentMessage);
} else if (name.equalsIgnoreCase("result")){
done = true;
}
break;
}
Log.d("aaa", Integer.toString(eventType));
eventType = parser.next(); <--- 에러 나는 부분
}
첫 줄 : <?xml version="1.0" encoding="utf-8" ?> 이 문장앞에 공백이나 위에 빈 줄이 있으면 에러가 납니다.
eventType = parser.next(); 요부분에서 에러가 나더라고요...
while문으로 진입해 XmlPullParser.START_DOCUMENT: 가 선택된 후에 에러가 납니다...
공백을 지우면 해결되지 않느냐 라고 할 수 있지만 웹상에 있는 파일을 불러오는거라서 제가 어떻게 할 수가 없네요...
코드는
while (eventType != XmlPullParser.END_DOCUMENT && !done){
String name = null;
switch (eventType){
case XmlPullParser.START_DOCUMENT:
mList = new ArrayList<Message>();
break;
case XmlPullParser.START_TAG:
name = parser.getName();
if (name.equalsIgnoreCase("item")){
currentMessage = new Message();
} else if (currentMessage != null){
if (name.equalsIgnoreCase("item_id")){
currentMessage.setItemId(parser.nextText());
} else if (name.equalsIgnoreCase("category")){
currentMessage.setCategory(parser.nextText());
} else if (name.equalsIgnoreCase("category_id")){
currentMessage.setCategoryId(parser.nextText());
} else if (name.equalsIgnoreCase("publisher")){
currentMessage.setPublisher(parser.nextText());
} else if (name.equalsIgnoreCase("title")) {
currentMessage.setTitle(parser.nextText());
} else if (name.equalsIgnoreCase("date")) {
currentMessage.setDate(parser.nextText());
} else if (name.equalsIgnoreCase("url")) {
currentMessage.setDetailUrl(parser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
name = parser.getName();
if (name.equalsIgnoreCase("item") && currentMessage != null){
mList.add(currentMessage);
} else if (name.equalsIgnoreCase("result")){
done = true;
}
break;
}
Log.d("aaa", Integer.toString(eventType));
eventType = parser.next(); <--- 에러 나는 부분
}
이 문제 때문에 엄청난 시간을 삽질하고 있네요...해결 방법 알려주시면 정말 감사하겠습니다.
2010.07.02 06:17:06
try catch 하면 파싱이 안되지 않을까요 ㅎㅎ
저는 xml parsing 할때 replace("\n", "") 먼저 해버리는데요..
xml 안에 white space 가 있는거 자체가 에러라고 생각해서요
2010.07.02 11:16:09
소스보기를 해보니 위에 빈칸 두 줄이 있고 선언부가 셋째줄에 위치합니다...xml규정에 첫줄부터 시작해야 한다고 나와있던데 여기만 왜 이런지;;;
try {
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
feedUrl = new URL("사이트 주소");
parser.setInput(feedUrl.openConnection().getInputStream(), null);
int eventType = parser.getEventType();
Message currentMessage = null;
boolean done = false;
+
본문소스
.
.
.
파싱전 준비단계 과정인데 공백 제거를 해 버리면 된다는 건 알겠는데 구현 방식을 모르겠습니다...
제가 해보니 계속 에러만 나고 진전이 없네요...어느부분을 추가 수정해야 되는지 알려주시면 감사하겠습니다.