안드로이드 개발 질문/답변
(글 수 45,052)
boolean RIVERGAUGE_NAME1=false,RIVER_NAME1=false,GU_NAME1=false,CURRENT_LEVEL1=false;
String RIVERGAUGE_NAME=null, RIVER_NAME=null, GU_NAME=null, CURRENT_LEVEL=null;
try {
text1.setText("파싱중입니다..");
URL url = new URL("url_address);
XmlPullParserFactory parserCreator = XmlPullParserFactory.newInstance();
XmlPullParser parser = parserCreator.newPullParser();
parser.setInput(url.openStream(), null);
text1.setText("스트림 통과");
int parserEvent = parser.getEventType();
while(parserEvent!=XmlPullParser.END_DOCUMENT){
switch(parserEvent){
case XmlPullParser.START_TAG: // parser가 시작 태그 만나면 실행
if(parser.getName().equals("RIVERGAUGE_NAME")){
RIVERGAUGE_NAME1=true;
}
if(parser.getName().equals("RIVER_NAME")){
RIVER_NAME1=true;
}
if(parser.getName().equals("GU_NAME")){
GU_NAME1=true;
}
if(parser.getName().equals("CURRENT_LEVEL")){
CURRENT_LEVEL1=true;
}
if(parser.getName().equals("message")){ //message 태그를 만나면 에러 출력
text2.setText(text2.getText()+"에러");
}
break;
case XmlPullParser.TEXT://내용 접근 시
if(RIVERGAUGE_NAME1){
RIVERGAUGE_NAME=parser.getText();
}
if(RIVER_NAME1){
RIVER_NAME=parser.getText();
RIVER_NAME1=false;
}
if(GU_NAME1){
GU_NAME=parser.getText();
GU_NAME1=false;
}
if(CURRENT_LEVEL1){
CURRENT_LEVEL=parser.getText();
CURRENT_LEVEL1=false;
}
break;
case XmlPullParser.END_TAG:
if(parser.getName().equals("RIVERGAUGE_NAME")){
text2.setText(text2.getText()+"수위계명 : "+RIVERGAUGE_NAME+
"\n하천명 : "+RIVER_NAME+
"\n구 명 : "+GU_NAME+
"\n수위값 : "+CURRENT_LEVEL);
RIVERGAUGE_NAME1=false;
}
break;
}
parserEvent=parser.next();
}
text3.setText("파싱 종료");
}catch(MalformedURLException e){
text1.setText(e.toString());
}
catch(Exception e){
text2.setText(e.toString());
}
}-------------------------XML파일의 구조는 이렇습니다.---------------------------
<?xml
version="1.0" encoding="UTF-8" ?>
<RIVERGAUGE_NAME>증 산 교</RIVERGAUGE_NAME>
<RIVERGAUGE_CODE>1401</RIVERGAUGE_CODE>
<RIVER_NAME>불 광 천</RIVER_NAME>
<GU_NAME>서대문구</GU_NAME>
<GU_CODE>114</GU_CODE>
<CURRENT_LEVEL>6.90</CURRENT_LEVEL>
<LEVEE_LEVEL>14.57</LEVEE_LEVEL>
<PLANFLOOD_LEVEL>13.53</PLANFLOOD_LEVEL>
<DANGEROUS_LEVEL>12.16</DANGEROUS_LEVEL>
<WARNING_LEVEL>11.35</WARNING_LEVEL>
<ORDINARY_LEVEL>6.60</ORDINARY_LEVEL>
<UNDERWATER_LEVEL>0.00</UNDERWATER_LEVEL>
<CONTROL_LEVEL>0.00</CONTROL_LEVEL>
<STORED_TIME>2012-08-02 16:25:30</STORED_TIME>
<TRANSFER_TIME>2012-08-02 16:24:09</TRANSFER_TIME>
</row1>
-----------------------------------------------------------------------------------
위 XML파일에서 RIVERGAUGE_NAME, RIVER_NAME,GU_NAME,CURRENT_LEVEL 데이터만
얻어오기 위한 코딩을 작성하였는데 text view에 아무런 데이터도 출력되지 않는 것으로 보아 null값을
얻어오는 것 같습니다. openapi사용이 처음이라 어느 부분이 틀린건지 감이 오질않네요 @_@ 조언 좀 부탁 드리겠습니다.
-----------------------------------------------------------------------------------
위 XML파일에서 RIVERGAUGE_NAME, RIVER_NAME,GU_NAME,CURRENT_LEVEL 데이터만
얻어오기 위한 코딩을 작성하였는데 text view에 아무런 데이터도 출력되지 않는 것으로 보아 null값을
얻어오는 것 같습니다. openapi사용이 처음이라 어느 부분이 틀린건지 감이 오질않네요 @_@ 조언 좀 부탁 드리겠습니다.




읭?? XML 구조를 잘 보세요....
RIVERGAUGE_NAME이 파싱이 끝난 상태에서는 RIVERGAUGE_NAME외에 다른 어떤 정보도 모르는데요...
RIVERGAUGE_NAME 파싱 끝난 상태에서 다른 정보를 출력할라고 하는데 그게 나올리가 없죠...
일단 님의 코드는 RIVERGAUGE_NAME 태그 하위로 다른 태그들이 들어가 있어야 파싱이 가능한 코드네요...