안드로이드 개발 질문/답변
(글 수 45,052)
지난번엔 많은 분들이 답변 주셔서 덕분에 해결을 했는데
다시한번 난관에 부딪혔습니다
http://stardomy.nayana.com/xmlview.php
위의 페이지에서 정보를 파싱해야하는데
저희가 하려는게 일단 phone 정보를 판별해서 거기에 해당하는 money 값을 파싱해오는 작업을 하려합니다.
public ArrayList<String> getXmlData(){
String rss = "http://stardomy.nayana.com/xmlview.php";
ArrayList<String> titleList = new ArrayList<String>();
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
URL url = new URL("rss);
InputStream is = url.openStream();
xpp.setInput(is, "euc-kr");
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equals("phone")) {
String phone = xpp.nextText();
if(phone.equals("15555215554")) {
eventType = xpp.next();
if(xpp.getName().equals("money")) {
String money = xpp.nextText();
titleList.add(money);
}
}
}
}
eventType = xpp.next();
}
그래서 이렇게 짜봤는데 안되더군요 ㅜㅜ
로그 찍어보니까 폰정보 비교하는 부분까지는 정상적으로 되는거 같은데
그 다음 money 태그 판별하는 부분에서 못넘어가는 것 같습니다.
해결 방법 없을까요??
2011.06.09 02:48:35
스위치를 토글하시는게 좋을 것 같은데요;;
boolean toggle = false;
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equals("phone")) {
String phone = xpp.getText();
if(phone.equals("15555215554")) {
toggle = true; }
if(xpp.getName().equals("money") && toggle) {
//구현
toggle = false;
}



파싱하는 로직 자체가 잘못된거 같습니다.
start_tag안에서 계속 .next()를 호출해서 뭔가 꼬이는 것 같습니다.
파싱 로직 구현할때는 저렇게 중첩 if문을 사용하는 것 보다는
while문 안에 switch() case : 문, 각각의 case에서 조건문 사용하는 것이
코드 가독성도 좋고 처리하기도 편합니다.
.next()는 switch문 끝나고 한번만 해줘도 됩니다.
구글링 조금만 하시면 xml파싱 관련 쉽고 훌륭한 예제들 많습니다.
개발자의 자질 중 하나를 감히 꼽자면. 구글링이죠 : )