Android XML 분석 기술-자체 eoe
13471 단어 android
package eoe.androidxml;
public class Book {
private int id;
private String name;
private float price;
public Book() {
}
public Book(int id, String name, float price) {
this.id = id;
this.name = name;
this.price = price;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
@Override
public String toString() {
return "Book [name=" + name + ", price=" + price + "]";
}
}
4.Sax 분석 XML 의 이벤트 처리 클래스: Sax 의 이벤트 처리 류 는 반드시 ContentHandler 인 터 페 이 스 를 실현 해 야 하지만,우 리 는 이 예 에서 ContentHandler 인터페이스의 모든 방법 을 사용 할 필요 가 없다.우 리 는 그 중의 세 가지 방법 만 필요 하 다.그래서 Sax 는 우리 에 게 어떠한 조작 도 하지 않 은 ContentHandler 구현 클래스 Default Handler 를 제공 합 니 다.우 리 는 Default Handler 류 를 직접 계승 하고 우리 가 필요 로 하 는 방법 을 다시 쓰 면 된다.
package eoe.androidxml.;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.changcheng.androidxml.entity.Book;
public class SaxXmlContentHandler extends DefaultHandler {
private List books;
private Book book;
private String tagName;
public List getBooks() {
return books;
}
/** 。*/
@Override
public void startDocument() throws SAXException {
this.books = new ArrayList();
}
/** 。*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (this.tagName != null) {
String data = new String(ch, start, length);
if (this.tagName.equals("name")) {
this.book.setName(data);
} else if (this.tagName.equals("price")) {
this.book.setPrice(Float.parseFloat(data));
}
}
}
/**
* 。
* namespaceURI:
* localName: ( )
* qName: ( )
* atts:
*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (localName.equals("book")) {
book = new Book();
book.setId(Integer.parseInt(attributes.getValue(0)));
}
this.tagName = localName;
}
/**
* 。
* uri:
* localName: ( )
* name: ( )
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (localName.equals("book")) {
this.books.add(this.book);
}
this.tagName = null;
}
}
5.테스트 Sax 를 작성 하여 XML 의 클래스 를 해석 합 니 다. 프로젝트 를 만 들 때 생 성 된 AndroidXML.java 는 사용 되 지 않 았 습 니 다.우 리 는 안 드 로 이 드 의 유닛 테스트 를 사용 하여 위의 프로그램 을 실행 하기 때 문 입 니 다. Android 유닛 테스트 클래스 작성:자바 코드:
package eoe.androidxml;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import com.changcheng.androidxml.entity.Book;
import com.changcheng.androidxml.xml.AndoridSaxXml;
import com.changcheng.androidxml.xml.AndroidPullXML;
import android.test.AndroidTestCase;
import android.util.Log;
public class TestAndroidXML extends AndroidTestCase {
private static final String TAG = "TestAndroidXML";
/**
* Sax XML
* @throws Throwable
*/
public void testAndroidSaxReadXML() throws Throwable{
InputStream file = this.getClass().getClassLoader().getResourceAsStream("books.xml");
try {
List books = AndoridSaxXml.readXML(file);
Log.i(TAG, books.toString());
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
}
6.테스트 실행 outline 패 널 에 있 는 testAndroidSaxReadXML 방법 이나 TestAndroidXML 류 의 testAndroidSaxReadXML 방법 에서 오른쪽 단 추 를 누 르 십시오->Debug As->Android Junit Test.실행 이 끝 난 후 LogCat 패 널 에서 실행 끝 을 봅 니 다.Sax 를 사용 하여 XML 문 서 를 만 드 는 것 에 대해 서 는 정리 하지 않 겠 습 니 다.아래 의 Pull 기술 이 야 말로 우리 가 안 드 로 이 드 개발 을 진행 하 는 중점 이다. 2.Pull 분석 기술 Pull 분석 기술 은 Sax 분석 기술 원리 와 같 지만 Sax 분석 보다 간단 하 며 분석 속도 와 점용 자원 의 차이 가 많 지 않 습 니 다.Android 내부 에서 사용 하 는 XML 해석 기술 은 바로 Pull 입 니 다.Android 공식 추천 개발 자 들 은 Pull 해석 기술 을 사용 합 니 다.Pull 해석 기술 은 제3자 가 개발 한 오픈 소스 기술 로 자바 SE 개발 에 도 활용 할 수 있다.다음은 Pull 분석 기술 로 XML 파일 을 분석 한 다음 Pull 기술 로 XML 파일 을 생 성 합 니 다. Pull 분석 XML 문서 1.XML 파일 위의 books.xml 을 사용 합 니 다. 2.XML 문서 에 대응 하 는 실체 Book 여전히 위의 북 자바 사용 하기 3.Pull 분석 XML 류 자바 코드:
package eoe.xml;
import java.io.InputStream;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;
import android.util.Xml;
import com.changcheng.androidxml.entity.Book;
public class AndroidPullXML {
public static List readXML(InputStream inputStream,
String inputEncoding) throws Exception {
// Pull
XmlPullParserFactory pullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser pullParser = pullParserFactory.newPullParser();
// XML
pullParser.setInput(inputStream, inputEncoding);
//
int eventType = pullParser.getEventType();
List books = null;
Book book = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
String nodeName = pullParser.getName();
switch (eventType) {
//
case XmlPullParser.START_DOCUMENT:
books = new ArrayList();
break;
//
case XmlPullParser.START_TAG:
if ("book".equals(nodeName)) {
book = new Book();
book.setId(Integer.parseInt(pullParser.getAttributeValue(0)));
} else if ("name".equals(nodeName)) {
book.setName(pullParser.nextText());
} else if ("price".equals(nodeName)) {
book.setPrice(Float.parseFloat(pullParser.nextText()));
}
break;
//
case XmlPullParser.END_TAG:
if ("book".equals(nodeName)) {
books.add(book);
book = null;
}
break;
}
eventType = pullParser.next();
}
return books;
}
}
4.테스트 Pull 분석 XML 류 자바 코드 작성:
/**
* Pull XML
* @throws Throwable
*/
public void testAndroidPullReadXML() throws Throwable {
InputStream file = this.getClass().getClassLoader().getResourceAsStream("books.xml");
try {
List books = AndroidPullXML.readXML(file, "UTF-8");
Log.i(TAG, books.toString());
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
5.테스트 실행 outline 패 널 에 있 는 test AndroidPull ReadXML 방법 이나 Test AndroidXML 류 의 test AndroidPull ReadXML 방법 에서 오른쪽 단 추 를 누 르 십시오->Debug As->Android Junit Test.실행 이 끝 난 후 LogCat 패 널 에서 실행 끝 을 봅 니 다. Pull XML 문서 생 성 Pull 을 사용 하여 위의 books.xml 문 서 를 생 성 합 니 다. 1.AndroidPullXML 클래스 에 방법 을 추가 합 니 다:자바 코드:
public static void writeXML(Writer writer, List books)
throws Exception {
// XML
XmlSerializer writexml = Xml.newSerializer();
writexml.setOutput(writer);
// XML
writexml.startDocument("UTF-8", true);
writexml.startTag("", "books");
for (Book book : books) {
// name
writexml.startTag("", "name");
writexml.attribute("", "id", book.getId() + "");
writexml.text(book.getName());
writexml.endTag("", "name");
// price
writexml.startTag("", "price");
writexml.text(book.getPrice() + "");
writexml.endTag("", "price");
}
//writexml.endTag("", "books");
}
2.테스트 Pull 생 성 XML 방법 자바 코드 작성:
/**
* Pull XML
* @throws Throwable
*/
public void testAndroidPullWriteXML() throws Throwable {
// 。( , 。)
StringWriter writer = new StringWriter();
//
List books = new ArrayList();
books.add(new Book(1, "C", 89));
books.add(new Book(1, "C++", 100));
books.add(new Book(1, "Java", 87));
books.add(new Book(1, "JavaEE", 95));
// XML
AndroidPullXML.writeXML(writer, books);
//
Log.i(TAG, books.toString());
}
3.테스트 실행 outline 패 널 에 있 는 test AndroidPull Write XML 방법 이나 Test AndroidXML 류 의 test AndroidPull Write XML 방법 에서 오른쪽 단 추 를 누 르 십시오->Debug As->Android Junit Test.실행 이 끝 난 후 LogCat 패 널 에서 실행 끝 을 봅 니 다.
6.테스트 실행 outline 패 널 에 있 는 testAndroidSaxReadXML 방법 이나 TestAndroidXML 류 의 testAndroidSaxReadXML 방법 에서 오른쪽 단 추 를 누 르 십시오->Debug As->Android Junit Test.실행 이 끝 난 후 LogCat 패 널 에서 실행 끝 을 봅 니 다. Sax 를 사용 하여 XML 문 서 를 만 드 는 것 에 대해 서 는 정리 하지 않 겠 습 니 다.아래 의 Pull 기술 이 야 말로 우리 가 안 드 로 이 드 개발 을 진행 하 는 중점 이다. 2.Pull 분석 기술 Pull 분석 기술 은 Sax 분석 기술 원리 와 같 지만 Sax 분석 보다 간단 하 며 분석 속도 와 점용 자원 의 차이 가 많 지 않 습 니 다.Android 내부 에서 사용 하 는 XML 해석 기술 은 바로 Pull 입 니 다.Android 공식 추천 개발 자 들 은 Pull 해석 기술 을 사용 합 니 다.Pull 해석 기술 은 제3자 가 개발 한 오픈 소스 기술 로 자바 SE 개발 에 도 활용 할 수 있다.다음은 Pull 분석 기술 로 XML 파일 을 분석 한 다음 Pull 기술 로 XML 파일 을 생 성 합 니 다. Pull 분석 XML 문서 1.XML 파일 위의 books.xml 을 사용 합 니 다. 2.XML 문서 에 대응 하 는 실체 Book 여전히 위의 북 자바 사용 하기 3.Pull 분석 XML 류 자바 코드:
package eoe.xml;
import java.io.InputStream;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;
import android.util.Xml;
import com.changcheng.androidxml.entity.Book;
public class AndroidPullXML {
public static List readXML(InputStream inputStream,
String inputEncoding) throws Exception {
// Pull
XmlPullParserFactory pullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser pullParser = pullParserFactory.newPullParser();
// XML
pullParser.setInput(inputStream, inputEncoding);
//
int eventType = pullParser.getEventType();
List books = null;
Book book = null;
while (eventType != XmlPullParser.END_DOCUMENT) {
String nodeName = pullParser.getName();
switch (eventType) {
//
case XmlPullParser.START_DOCUMENT:
books = new ArrayList();
break;
//
case XmlPullParser.START_TAG:
if ("book".equals(nodeName)) {
book = new Book();
book.setId(Integer.parseInt(pullParser.getAttributeValue(0)));
} else if ("name".equals(nodeName)) {
book.setName(pullParser.nextText());
} else if ("price".equals(nodeName)) {
book.setPrice(Float.parseFloat(pullParser.nextText()));
}
break;
//
case XmlPullParser.END_TAG:
if ("book".equals(nodeName)) {
books.add(book);
book = null;
}
break;
}
eventType = pullParser.next();
}
return books;
}
}
4.테스트 Pull 해석 XML 클래스 작성 sax 테스트 클래스 Test AndroidXML 에 테스트 방법 추가:자바 코드:
/**
* Pull XML
* @throws Throwable
*/
public void testAndroidPullReadXML() throws Throwable {
InputStream file = this.getClass().getClassLoader().getResourceAsStream("books.xml");
try {
List books = AndroidPullXML.readXML(file, "UTF-8");
Log.i(TAG, books.toString());
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
5.테스트 실행 outline 패 널 에 있 는 test AndroidPull ReadXML 방법 이나 Test AndroidXML 류 의 test AndroidPull ReadXML 방법 에서 오른쪽 단 추 를 누 르 십시오->Debug As->Android Junit Test.실행 이 끝 난 후 LogCat 패 널 에서 실행 끝 을 봅 니 다. Pull XML 문서 생 성 Pull 을 사용 하여 위의 books.xml 문 서 를 생 성 합 니 다. 1.AndroidPullXML 클래스 에 방법 을 추가 합 니 다:자바 코드:
public static void writeXML(Writer writer, List books)
throws Exception {
// XML
XmlSerializer writexml = Xml.newSerializer();
writexml.setOutput(writer);
// XML
writexml.startDocument("UTF-8", true);
writexml.startTag("", "books");
for (Book book : books) {
// name
writexml.startTag("", "name");
writexml.attribute("", "id", book.getId() + "");
writexml.text(book.getName());
writexml.endTag("", "name");
// price
writexml.startTag("", "price");
writexml.text(book.getPrice() + "");
writexml.endTag("", "price");
}
writexml.endTag("", "books");
}
2.테스트 Pull 생 성 XML 방법 작성 sax 테스트 클래스 Test AndroidXML 에 테스트 방법 추가:자바 코드:
/**
* Pull XML
* @throws Throwable
*/
public void testAndroidPullWriteXML() throws Throwable {
// 。( , 。)
StringWriter writer = new StringWriter();
//
List books = new ArrayList();
books.add(new Book(1, "C", 89));
books.add(new Book(1, "C++", 100));
books.add(new Book(1, "Java", 87));
books.add(new Book(1, "JavaEE", 95));
// XML
AndroidPullXML.writeXML(writer, books);
//
Log.i(TAG, books.toString());
}
3.테스트 실행 outline 패 널 에 있 는 test AndroidPull Write XML 방법 이나 Test AndroidXML 류 의 test AndroidPull Write XML 방법 에서 오른쪽 단 추 를 누 르 십시오->Debug As->Android Junit Test.실행 이 끝 난 후 LogCat 패 널 에서 실행 끝 을 봅 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.