안드로이드 개발 질문/답변
(글 수 45,052)
xml파싱 참조하려고 제가 바꾸면서 하고있는데 이해가 안되는 부분이너무많아서
그러는데 주석좀 달아주세염 고수님들 !!
package com.riaplatform.sample10;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.util.Log;
import java.net.URL;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
public class XmlParser extends Activity {
private TextView tv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TextView(this);
try
{
URL url = new URL("http://192.168.1.50:8080/dongseo/timetable.xml");
SAXParserFactory parserModel = SAXParserFactory.newInstance();
SAXParser concreteParser = parserModel.newSAXParser();
XMLReader myReader = concreteParser.getXMLReader();
MySampleHandler mySample = new MySampleHandler(this);
myReader.setContentHandler(mySample);
myReader.parse(new InputSource(url.openStream()));
Log.i("TRACE", "Success");
}catch(Exception e)
{
tv.setText("Error: "+e.getMessage());
}
setContentView(tv);
}
public void updateTextView(String text)
{
tv.setText(text);
}
}
class MySampleHandler extends DefaultHandler
{
private StringBuffer name = new StringBuffer();
private StringBuffer profe = new StringBuffer();
private boolean hasName = false;
private boolean hasprofe = false;
private XmlParser xp;
public MySampleHandler(XmlParser xp)
{
this.xp = xp;
}
public void startElement(String uri, String localName, String qName, Attributes atts)
{
if(localName.equals("name"))
{
hasName = true;
}
else if(localName.equals("company"))
{
hasprofe = true;
}
}
public void endElement(String uri, String localName, String qName)
{
if(localName.equals("timerable"))
{
xp.updateTextView(name.toString()+"\n"+profe.toString()+"\n");
}
}
public void characters(char[] chars, int start, int leng)
{
if(hasName)
{
hasName = false;
name.append(chars, start, leng);
}
else if(hasprofe)
{
hasprofe = false;
profe.append(chars, start, leng);
}
}
}
그러는데 주석좀 달아주세염 고수님들 !!
package com.riaplatform.sample10;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.util.Log;
import java.net.URL;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
public class XmlParser extends Activity {
private TextView tv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TextView(this);
try
{
URL url = new URL("http://192.168.1.50:8080/dongseo/timetable.xml");
SAXParserFactory parserModel = SAXParserFactory.newInstance();
SAXParser concreteParser = parserModel.newSAXParser();
XMLReader myReader = concreteParser.getXMLReader();
MySampleHandler mySample = new MySampleHandler(this);
myReader.setContentHandler(mySample);
myReader.parse(new InputSource(url.openStream()));
Log.i("TRACE", "Success");
}catch(Exception e)
{
tv.setText("Error: "+e.getMessage());
}
setContentView(tv);
}
public void updateTextView(String text)
{
tv.setText(text);
}
}
class MySampleHandler extends DefaultHandler
{
private StringBuffer name = new StringBuffer();
private StringBuffer profe = new StringBuffer();
private boolean hasName = false;
private boolean hasprofe = false;
private XmlParser xp;
public MySampleHandler(XmlParser xp)
{
this.xp = xp;
}
public void startElement(String uri, String localName, String qName, Attributes atts)
{
if(localName.equals("name"))
{
hasName = true;
}
else if(localName.equals("company"))
{
hasprofe = true;
}
}
public void endElement(String uri, String localName, String qName)
{
if(localName.equals("timerable"))
{
xp.updateTextView(name.toString()+"\n"+profe.toString()+"\n");
}
}
public void characters(char[] chars, int start, int leng)
{
if(hasName)
{
hasName = false;
name.append(chars, start, leng);
}
else if(hasprofe)
{
hasprofe = false;
profe.append(chars, start, leng);
}
}
}
2010.08.24 14:54:24
SAX파싱법 이네요.....
주석 달아 드리는건 아니지만.... 개인적으로는 안드로이드에서의 파싱은
XMLFULL파싱을 추천 합니다....(쉽거든요 .....)
2010.08.24 15:50:24
무턱대고 XMLFULL 파싱으로 가는것은 문제가 있습니다..
파싱해야 할 XML 데이터의 크기에 따라 방법을 달리해야 하는 부분이거든요..
XMLFULL 파싱의 경우는 제가 제대로 알고 있다면 XML을 먼저 모두 읽어들인뒤에 파싱작업이 들어가기때문에..
속도가 느립니다..
그래서 대용량 XML 파싱을 할때는 SAX로 가는 편이지요..
XML 데이터가 크지 않다면 XMLFULL 파싱이나 SAX는 별 차이가 안보입니다만..
데이터가 커지면 그 차이가 달라지고..
모바일장비 특성상 메모리 제약도 생각해야 하는 부분이 있습니다..
그래서 그런쪽은 조금 신중을 기하시는게 좋습니다..^^..