Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Android xml parsing

896 views

Published on

  • Be the first to comment

  • Be the first to like this

Android xml parsing

  1. 1. Android XML ParsingS.O.LAB Develop by Oracleon
  2. 2. 웹 요청1Http 클라이언트 만들기 1. URL 객체 생성 2. openConnection() 메소드 호출 3. HttpURLConnection 객체형으로 casting 후 데이터 교환URL url = new URL(urlStr);HttpURLConnection conn = (HttpURLConnection)url.openConnection();if (conn != null) { conn.setConnectTimeout(10000); conn.setRequestMethod("GET"); conn.setDoInput(true); conn.setDoOutput(true); int resCode = conn.getResponseCode(); if (resCode == HttpURLConnection.HTTP_OK) { BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())) ; String line = null; while(true) { line = reader.readLine(); if (line == null) { break; } output.append(line + "n"); } reader.close(); conn.disconnect(); }
  3. 3. 웹 요청1 메소드 설명1. setRequestMethod(“GET”) // Get방식 요청설정2. setDoInput(),setDoOutput() // 객체의 입출력이 가능하로록 설정3. getResposeCode() // 이시점에 웹서버에 페이지 요청시작4. 응답코드 HTTP_OK : 정상 / HTTP_NOT_FOUND :페이지없음5. readLine()은 BufferedReader클래스에 정의되어 있다.6. HttpURLConnection객체인 conn을 InputStreamReaderr객체로 만든후 BufferedReader 클래스형 객체로 만든다.BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream())) ;String line = reader.readLine();
  4. 4. DOM ParserDOM : 트리형식으로 전체구조 파악후 정보 추출,메모리 사용높음, 고성능SAX : 순차적으로 문서를 읽으면서 차례대로 추출, 메모리 사용낮음, 느림 import javax.xml.parsers.*; import org.w3c.dom.*;DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();InputStream istream = new ByteArrayInputStream(xml.getBytes("utf-8"));Document doc = builder.parse(istream);Element order = doc.getDocumentElement();NodeList items = order.getElementsByTagName("item");Node item = items.item(0);Node text = item.getFirstChild();String ItemName = text.getNodeValue();mResult.setText("주문 항목 : " + ItemName);
  5. 5. DOM ParserDocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();- 추상클래스이므로 직접생성할수 없고 newInstace 정적메소드로 생성한다.DocumentBuilder builder = factory.newDocumentBuilder();실제파싱을 할 builder 객체도 정적메소드 newDocumnetBuilder() 로 생성한다. String xml = "<?xml version="1.0" encoding="utf-8"?>n" + "<order><item>Mouse</item></order>";InputStream istream = new ByteArrayInputStream(xml.getBytes("utf-8"));Document doc = builder.parse(istream);parse메소드는 스트림을 분석하여 메모리에 트리형태로 전개해 놓는다.이후 Document객체의 메소드를 이용하여 요소들을 빨리 읽을수 있다.Element order = doc.getDocumentElement();NodeList items = order.getElementsByTagName("item");Node item = items.item(0);Node text = item.getFirstChild();String ItemName = text.getNodeValue();
  6. 6. DOM Parser String xml = "<?xml version="1.0" encoding="utf-8"?>n" + "<order>" + "<item Maker="Samsung" Price="23000">Mouse</item>" + "<item Maker="LG" Price="12000">KeyBoard</item>" + "<item Price="156000" Maker="Western Digital">HDD</item>" + "</order>";DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();InputStream istream = new ByteArrayInputStream(xml.getBytes("utf-8"));Document doc = builder.parse(istream);Element order = doc.getDocumentElement();NodeList items = order.getElementsByTagName("item");String Result = "";for (int i = 0; i < items.getLength();i++) { Node item = items.item(i); Node text = item.getFirstChild(); String ItemName = text.getNodeValue(); Result += ItemName + " : "; NamedNodeMap Attrs = item.getAttributes(); for (int j = 0;j < Attrs.getLength(); j++) { Node attr = Attrs.item(j); Result += (attr.getNodeName() + " = " + attr.getNodeValue() + " "); } Result += "n"; } mResult.setText("주문 목록n" + Result);}
  7. 7. SAX parseHttp 클라이언트 만들기1. URL 객체 생성2. openConnection() 메소드 호출3. HttpURLConnection 객체형으로 casting 후 데이터 교환

×