Android XML Parsing

S.O.LAB Develop by Oracleon
웹 요청1
Http 클라이언트 만들기
 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();
         }
웹 요청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();
DOM Parser
DOM : 트리형식으로 전체구조 파악후 정보 추출,메모리 사용높음, 고성능
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);
DOM Parser
DocumentBuilderFactory 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();
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);
}
SAX parse
Http 클라이언트 만들기
1. URL 객체 생성
2. openConnection() 메소드 호출
3. HttpURLConnection 객체형으로 casting 후 데이터 교환

Android xml parsing

  • 1.
    Android XML Parsing S.O.LABDevelop by Oracleon
  • 2.
    웹 요청1 Http 클라이언트만들기 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.
    웹 요청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.
    DOM Parser DOM :트리형식으로 전체구조 파악후 정보 추출,메모리 사용높음, 고성능 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.
    DOM Parser DocumentBuilderFactory 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.
    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.
    SAX parse Http 클라이언트만들기 1. URL 객체 생성 2. openConnection() 메소드 호출 3. HttpURLConnection 객체형으로 casting 후 데이터 교환