안녕하세요.
이번에는 json파싱에 이어 xml파싱을 알아보겠습니다.
이번에도 간단한 예제를 통하여 알아볼건데요.
json 이나 xml 이나 tag를 구분하여 내가 원하는값을 찾는건 같습니다.
하지만 어떤 값인가에 따라 파싱하는 방법이 다른데요.
xml은 말 그대로 xml 형식의 파일을 파싱할때 쓰입니다.
<items>
보이는 예제가 xml 형식의 문서입니다.
잘 보면 item 태그가 하나의 항목을 담고있고 item 태그 안의 세부태그들이 항목의 정보를 담고있습니다.
이것들을 기준으로 파싱을 할 수 있는데요.
예제를 보면서 알아보겠습니다.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textview = (TextView) findViewById(R.id.textView1);
new GetXMLTask().execute();
}
먼저 메인입니다. 메인은 파싱한 결과를 보여주기위한 textview 하나만 선언하였습니다.
그리고 AsyncTask 를 통해 파싱한 값을 가져옵니다. 그 과정에서 textview 에 결과를 출력하는 과정도 포함되어있습니다.
private class GetXMLTask extends AsyncTask<String, Void, Document>{
@Override
protected Document doInBackground(String... urls) {
URL url;
try {
url = new URL("http://apis.data.go.kr/6260000/BusanBicycleInfoService/getBicycleRackInfo?numOfRows=10&ServiceKey=??");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();
} catch (Exception e) {
Toast.makeText(getBaseContext(), "Parsing Error", Toast.LENGTH_SHORT).show();
}
return doc;
}
@Override
protected void onPostExecute(Document doc) {
String s = "";
NodeList nodeList = doc.getElementsByTagName("item");
for(int i = 0; i< nodeList.getLength(); i++){
Node node = nodeList.item(i);
Element fstElmnt = (Element) node;
NodeList idx = fstElmnt.getElementsByTagName("idx");
s += "idx = "+ idx.item(0).getChildNodes().item(0).getNodeValue() +"\n";
NodeList gugun = fstElmnt.getElementsByTagName("gugun");
s += "gugun = "+ gugun.item(0).getChildNodes().item(0).getNodeValue() +"\n";
NodeList instt = fstElmnt.getElementsByTagName("instt");
s += "instt = "+ instt.item(0).getChildNodes().item(0).getNodeValue() +"\n";
NodeList spot = fstElmnt.getElementsByTagName("spot");
s += "spot = "+ spot.item(0).getChildNodes().item(0).getNodeValue() +"\n";
NodeList spotGubun = fstElmnt.getElementsByTagName("spotGubun");
s += "spotGubun = "+ spotGubun.item(0).getChildNodes().item(0).getNodeValue() +"\n";
NodeList airPump = fstElmnt.getElementsByTagName("airPump");
s += "airPump = "+ airPump.item(0).getChildNodes().item(0).getNodeValue() +"\n";
NodeList updtDate = fstElmnt.getElementsByTagName("updtDate");
s += "updtDate = "+ updtDate.item(0).getChildNodes().item(0).getNodeValue() +"\n";
}
textview.setText(s);
super.onPostExecute(doc);
}
}
xml을 파싱하고 결과를 간단히 가공하여 표현하는 클래스입니다. (서비스키는 공개하지않았습니다. 예시용이라서요...)
이번 예제는 공공데이터 포털의 api를 사용하였는데요.
url 에 xml주소와 자신의 서비스키를 넣고 getElementsByTagName 으로 하나의 데이터항목인 item을 구분하여줍니다.
url 에는 요청메세지를 명세하여 보내는데요, 사용하고자하는 api 기술문서를 참고하면 더욱 원하는 정보를 손쉽게 찾을수 있습니다.
그런뒤 node 를 이용해 큰 항목구분의 자식 태그를 찾아 내가 원하는 값만 가공하여 사용하면됩니다.
json 과 xml 은 아주 많이쓰이고 유용하니 알아두면 좋을것같습니다.
'Android' 카테고리의 다른 글
[안드로이드]커스텀리스트뷰(listview) (2) | 2017.11.22 |
---|---|
[안드로이드]퀵액션(QuickAction)(말풍선버튼) (3) | 2017.09.06 |
[안드로이드]JSON파싱(json parser) (8) | 2017.09.04 |
[안드로이드]인텐트 로 값 전달(Intent putExtra) (0) | 2017.08.30 |
[안드로이드]커스텀 zxing(custom바코드스캐너) (59) | 2017.08.29 |