Android 에서 XML 파일 을 처리 하 는 세 가지 방법
34948 단어 안 드 로 이 드 기반
DOM 해석
'안 드 로 이 드 클래식 프로젝트 사례 개발 실전 보전' 정리
DOM 이 분석 할 때 모든 내용 을 메모리 에 읽 습 니 다.이런 해석 방식 도 XML 의 줄 바 꿈 자 를 해석 할 것 이다.해석 할 텍스트:
<resources>
<fruit id="1" name="apple" ><fruit id="01" name="grap">10yuanfruit>fruit>
<fruit id="2" name="banana" >
3yuan
fruit>
<fruit id="3" name="pear" />
resources>
package com.supermario.domxml;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class DomXMLActivity extends Activity {
//
private Button start;
// TextView
private TextView show;
//Assets xml
private String fileName="fruit.xml";
InputStream inStream=null;
/** */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
show=(TextView)findViewById(R.id.show);
start=(Button)findViewById(R.id.start);
try {
// Assets
inStream = this.getAssets().open(fileName);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//
start.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//
String result="";
//
result=parse(inStream);
//
show.setText(result);
}
});
}
//
public String parse(InputStream inStream)
{
String result="";
// DocumentBuilderFactory
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=null;
Document doc=null;
try {
// DocumentBuilder
builder=dbf.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
//
doc=builder.parse(inStream);
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Element ele=doc.getDocumentElement();
// “fruit”
NodeList nl=ele.getElementsByTagName("fruit");
if(nl != null && nl.getLength() != 0)
{
for(int i=0;i//
result += "name:"+entry.getAttribute("name")+"-->";
//
result += entry.getTextContent()+"
";
}
}
return result;
}
}
SAX 해석
SAX 가 사용 하 는 이벤트 드라이브 는 전체 문 서 를 해석 할 필요 가 없 이 내용 순서에 따라 XML 문법 에 맞 으 면 해석 을 시작 합 니 다.해석 할 때 ConrtentHandler 에 정 의 된 방법 을 되 돌려 줍 니 다. 주요 방법 은 다음 과 같 습 니 다. 1 startDocument: 문서 가 시 작 될 때 되 돌려 줍 니 다. 보통 여기 서 미리 처리 하 는 작업 을 합 니 다.2 startElement (String uri, String localName, String qName, Attributes attributes): 시작 탭 을 만 났 을 때 3 endElement () 를 호출 합 니 다. 끝 탭 을 만 났 을 때 호출 하고 뒷수습 을 할 수 있 습 니 다.4 characters (char [] ch, int start, int length): xml 내용 을 만 났 을 때 이 방법 을 터치 합 니 다.
<stundets>
<student id="20120812115">
<name> name>
<speciality> speciality>
<qq>843200157qq>
student>
<student id="20120812116">
<name> name>
<speciality> speciality>
<qq>812256156qq>
student>
<student id="20120812117">
<name> name>
<speciality> speciality>
<qq>812750158qq>
student>
stundets>
package com.supermario.saxxml;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
public class SaxXMLActivity extends Activity {
//
private Button button;
//
private ListView listView;
//
private ArrayList list=new ArrayList();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button=(Button)findViewById(R.id.btn1);
listView=(ListView) findViewById(R.id.listView1);
//
button.setOnClickListener(new ButtonListener());
}
class ButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
// students
List students=parserXMl();
//
for (Iterator iterator = students.iterator(); iterator.hasNext();) {
Student student = (Student) iterator.next();
// , list
list.add(String.valueOf(student.getId())+" "+student.getName()+" "+student.getSpeciality()+" "+String.valueOf((student.getQQ())));
}
// daapter listview
ArrayAdapter adapter=new ArrayAdapter(SaxXMLActivity.this, android.R.layout.simple_list_item_1, list);
// listview
listView.setAdapter(adapter);
}
}
// xml
private List parserXMl()
{
// SAX
SAXParserFactory factory=SAXParserFactory.newInstance();
Liststudents=null;
try {
// xml
XMLReader reader=factory.newSAXParser().getXMLReader();
students=new ArrayList();
reader.setContentHandler(new StudentHandler(students));
// Assets student.xml
reader.parse(new InputSource(SaxXMLActivity.this.getResources().getAssets().open("student.xml"))); //parse() InputSource
} catch (Exception e) {
// TODO: handle exception
}
return students;
}
}
package com.supermario.saxxml;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import android.util.Log;
public class StudentHandler extends DefaultHandler {
private String preTAG; // xml
private List ListStudent;
private Student stu;
//
public StudentHandler() {
super();
}
//
public StudentHandler(List listStudent) {
super();
ListStudent = listStudent;
}
//
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
Log.i("------>", " ");
super.startDocument();
}
//
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
Log.i("localName-------->", localName);
preTAG=localName; // preTAG
if ("student".equals(localName)) {
stu=new Student(); // student
// ID stu
stu.setId(Long.parseLong(attributes.getValue(0)));
for (int i = 0; i < attributes.getLength(); i++) {
Log.i("attributes-------->",String.valueOf(stu.getId()));
}
}
//
super.startElement(uri, localName, qName, attributes);
}
public void endDocument() throws SAXException {
Log.i("------>", " ");
super.endDocument();
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
preTAG="";
if ("student".equals(localName)) {
ListStudent.add(stu);
Log.i("-------->", " ");
}
super.endElement(uri, localName, qName);
}
//
public void characters(char[] ch, int start, int length)
throws SAXException {
String str;
// “name”
if ("name".equals(preTAG)) {
str=new String(ch,start,length);
stu.setName(str);
Log.i("name=", stu.getName());
// “speciality”
}else if ("speciality".equals(preTAG)) {
str=new String(ch,start,length);
stu.setSpeciality(str);
Log.i("speciality=", stu.getSpeciality());
// “qq”
}else if ("qq".equals(preTAG)) {
str=new String(ch,start,length);
stu.setQQ(Long.parseLong((str)));
Log.i("QQ=", String.valueOf(stu.getQQ()));
}
super.characters(ch, start, length);
}
public List getListStudent() {
return ListStudent;
}
public void setListStudent(List listStudent) {
ListStudent = listStudent;
}
}
PULL 해석
SAX 는 전체 문 서 를 해석 해 야 합 니 다. 우리 가 특정한 문서 의 일부분 만 분석 할 때 PULL 로 해석 하 는 방식 이 더욱 적합 합 니 다.PULL 해석 은 해상도 기 에서 이 벤트 를 주동 적 으로 가 져 올 수 있 도록 합 니 다. 우 리 는 어느 시점 에 주동 적 으로 이 벤트 를 가 져 오지 않 고 해석 을 끝 낼 수 있 습 니 다.
<stundets>
<student id="20120812115">
<name> name>
<speciality> speciality>
<qq>843200157qq>
student>
<student id="20120812116">
<name> name>
<speciality> speciality>
<qq>812256156qq>
student>
<student id="20120812117">
<name> name>
<speciality> speciality>
<qq>812750158qq>
student>
stundets>
package xom.supermario.pullxml;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
public class PullXMLActivity extends Activity {
//
private Button button;
//
private ListView listView;
//
private ArrayList list=new ArrayList();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button=(Button)findViewById(R.id.btn1);
listView=(ListView) findViewById(R.id.listView1);
//
button.setOnClickListener(new ButtonListener());
}
class ButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
// students
List students=parserXMl();
// List students=null;
//
for (Iterator iterator = students.iterator(); iterator.hasNext();) {
Student student = (Student) iterator.next();
// , list
list.add(String.valueOf(student.getId())+" "+student.getName()+" "+student.getSpeciality()+" "+String.valueOf((student.getQQ())));
}
// daapter listview
ArrayAdapter adapter=new ArrayAdapter(PullXMLActivity.this, android.R.layout.simple_list_item_1, list);
// listview
listView.setAdapter(adapter);
}
}
// xml
private List parserXMl()
{
// List , student
List students=null;
// student ,
Student stu=null;
try{
// student.xml
InputStream inputstream=PullXMLActivity.this.getResources().getAssets().open("student.xml");
// XmlParser
// : XmlPullParserFactory
XmlPullParserFactory pullFactory=XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser=pullFactory.newPullParser();
// : Android android.util.Xml
//XmlPullParser xmlPullParser=Xml.newPullParser();
// inputstream, “UTF-8”
xmlPullParser.setInput(inputstream, "UTF-8");
// ,
int eventType=xmlPullParser.getEventType();
//
while(eventType != XmlPullParser.END_DOCUMENT)
{
/* log
*START_DOCUMENT:0
*END_DOCUMENT:1
*START_TAG:2
*END_TAG:3
*TEXT:4
*/
Log.e("guojs--->event",eventType+"");
//
String localName=null;
switch(eventType)
{
case XmlPullParser.START_DOCUMENT:
// students , log
students=new ArrayList();
Log.e("guojs","start document!");
break;
case XmlPullParser.START_TAG:
{
localName=xmlPullParser.getName();
if ("student".equals(xmlPullParser.getName())) {
stu=new Student(); // student
// ID stu
stu.setId(Long.parseLong(xmlPullParser.getAttributeValue(0)));
Log.e("guojs",stu.getId()+"");
}
else if(stu != null)
{
//
String currentData=null;
if("name".equals(xmlPullParser.getName()))
{
/* nextText() : START_TAG,
* , ; END_TAG
* ; 。
*/
currentData=xmlPullParser.nextText();
// ”name“
stu.setName(currentData);
}
else if("speciality".equals(xmlPullParser.getName()))
{
currentData=xmlPullParser.nextText();
//
stu.setSpeciality(currentData);
}else if("qq".equals(xmlPullParser.getName()))
{
currentData=xmlPullParser.nextText();
// QQ
stu.setQQ(Long.parseLong(currentData));
}
}
}
break;
case XmlPullParser.END_TAG:
{
localName=xmlPullParser.getName();
Log.e("guojs--end tag",localName);
if("student".equals(localName) && stu != null)
{
// stu students
students.add(stu);
// stu
stu = null;
}
}
break;
default:
break;
}
//
eventType=xmlPullParser.next();// , 。
}
}catch(Exception e)
{
e.printStackTrace();
}
return students;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 모방 웨 이 보 @ 친구, \ # 화제 \ # 및 links 처리 방안웨 이 보 를 사용 할 때 우 리 는 모두 이 두 가지 기능 을 발견 할 것 이다. Span 와 를 통 해 이 루어 졌 다 고 생각 하기 쉽 지만 그 중에서 세부 적 인 처리 가 필요 하 다. 시 나 웨 이 보 가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.