book.xml如下:
Xml代码
1. < ?xml version="1.0" encoding="UTF-8"?>
2. < books>
3. < book id="12">
4. < name>thinking in java< /name>
5. < price>85.5< /price>
6. < /book>
7. < book id="15">
8. < name>Spring in Action< /name>
9. < price>39.0< /price>
10. < /book>
11. < /books>
< ?xml version="1.0" encoding="UTF-8"?>
< books>
< book id="12">
< name>thinking in java< /name>
< price>85.5< /price>
< /book>
< book id="15">
< name>Spring in Action< /name>
< price>39.0< /price>
< /book>
< /books>
Pull解析的代码如下PullParseService.java
Java代码
1. import java.io.InputStream;
2. import java.util.ArrayList;
3. import java.util.List;
4.
5. import org.xmlpull.v1.XmlPullParser;
6.
7. import android.util.Xml;
8.
9. import com.xtlh.cn.entity.Book;
10.
11. public class PullParseService {
12. public static List< Book> getBooks(InputStream inputStream) throws Exception{
13. List< Book> books = null;
14. Book book = null;
15. XmlPullParser parser = Xml.newPullParser();
16. parser.setInput(inputStream, "UTF-8");
17.
18. int event = parser.getEventType();//产生第一个事件
19. while(event!=XmlPullParser.END_DOCUMENT){
20. switch(event){
21. case XmlPullParser.START_DOCUMENT://判断当前事件是否是文档开始事件
22. books = new ArrayList< Book>();//初始化books集合
23. break;
24. case XmlPullParser.START_TAG://判断当前事件是否是标签元素开始事件
25. if("book".equals(parser.getName())){//判断开始标签元素是否是book
26. book = new Book();
27. book.setId(Integer.parseInt(parser.getAttributeValue(0)));//得到book标签的属性值,并设置book的id
28. }
29. if(book!=null){
30. if("name".equals(parser.getName())){//判断开始标签元素是否是name
31. book.setName(parser.nextText());
32. }else if("price".equals(parser.getName())){//判断开始标签元素是否是price
33. book.setPrice(Float.parseFloat(parser.nextText()));
34. }
35. }
36. break;
37. case XmlPullParser.END_TAG://判断当前事件是否是标签元素结束事件
38. if("book".equals(parser.getName())){//判断结束标签元素是否是book
39. books.add(book);//将book添加到books集合
40. book = null;
41. }
42. break;
43. }
44. event = parser.next();//进入下一个元素并触发相应事件
45. }//end while
46. return books;
47. }
48. }
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import android.util.Xml;
import com.xtlh.cn.entity.Book;
public class PullParseService {
public static List< Book> getBooks(InputStream inputStream) throws Exception{
List< Book> books = null;
Book book = null;
XmlPullParser parser = Xml.newPullParser();
parser.setInput(inputStream, "UTF-8");
int event = parser.getEventType();//产生第一个事件
while(event!=XmlPullParser.END_DOCUMENT){
switch(event){
case XmlPullParser.START_DOCUMENT://判断当前事件是否是文档开始事件
books = new ArrayList< Book>();//初始化books集合
break;
case XmlPullParser.START_TAG://判断当前事件是否是标签元素开始事件
if("book".equals(parser.getName())){//判断开始标签元素是否是book
book = new Book();
book.setId(Integer.parseInt(parser.getAttributeValue(0)));//得到book标签的属性值,并设置book的id
}
if(book!=null){
if("name".equals(parser.getName())){//判断开始标签元素是否是name
book.setName(parser.nextText());
}else if("price".equals(parser.getName())){//判断开始标签元素是否是price
book.setPrice(Float.parseFloat(parser.nextText()));
}
}
break;
case XmlPullParser.END_TAG://判断当前事件是否是标签元素结束事件
if("book".equals(parser.getName())){//判断结束标签元素是否是book
books.add(book);//将book添加到books集合
book = null;
}
break;
}
event = parser.next();//进入下一个元素并触发相应事件
}//end while
return books;
}
}
里面使用到的Book.java类
Java代码
1. public class Book {
2. private int id;
3. private String name;
4. private float price;
5. public int getId() {
6. return id;
7. }
8. public void setId(int id) {
9. this.id = id;
10. }
11. public String getName() {
12. return name;
13. }
14. public void setName(String name) {
15. this.name = name;
16. }
17. public float getPrice() {
18. return price;
19. }
20. public void setPrice(float price) {
21. this.price = price;
22. }
23. @Override
24. public String toString(){
25. return this.id+":"+this.name+":"+this.price;
26. }
27. }
public class Book {
private int id;
private String name;
private float 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 this.id+":"+this.name+":"+this.price;
}
}
测试使用的是android的单元测试,代码如下:
Java代码
1. import java.io.InputStream;
2. import java.util.List;
3.
4. import android.test.AndroidTestCase;
5. import android.util.Log;
6.
7. import com.xtlh.cn.entity.Book;
8. import com.xtlh.cn.service.PullParseService;
9.
10. public class testPullParseService extends AndroidTestCase{
11. private static final String TAG = "testPullParseService";
12. public void testPull() throws Exception{
13. InputStream input = this.getClass().getClassLoader().getResourceAsStream("book.xml");
14. PullParseService pull = new PullParseService();
15. List< Book> books = pull.getBooks(input);
16. for(Book book : books){
17. Log.i(TAG,book.toString());
18. }
19. }
20. }
import java.io.InputStream;
import java.util.List;
import android.test.AndroidTestCase;
import android.util.Log;
import com.xtlh.cn.entity.Book;
import com.xtlh.cn.service.PullParseService;
public class testPullParseService extends AndroidTestCase{
private static final String TAG = "testPullParseService";
public void testPull() throws Exception{
InputStream input = this.getClass().getClassLoader().getResourceAsStream("book.xml");
PullParseService pull = new PullParseService();
List< Book> books = pull.getBooks(input);
for(Book book : books){
Log.i(TAG,book.toString());
}
}
}
要使用android的单元测试,需要在AndroidManifest.xml文件中加入声明,AndroidManifest.xml如下:
Xml代码
1. < ?xml version="1.0" encoding="utf-8"?>
2. < manifest xmlns:android="http://schemas.android.com/apk/res/android"
3. package="com.xlth.cn.demo"
4. android:versionCode="1"
5. android:versionName="1.0">
6. < application android:icon="@drawable/icon" android:label="@string/app_name">
7. < uses-library android:name="android.test.runner" />
8. < activity android:name=".PullParseDemo"
9. android:label="@string/app_name">
10. < intent-filter>
11. < action android:name="android.intent.action.MAIN" />
12. < category android:name="android.intent.category.LAUNCHER" />
13. < /intent-filter>
14. < /activity>
15.
16. < /application>
17. < uses-sdk android:minSdkVersion="7" />
18. < instrumentation android:name="android.test.InstrumentationTestRunner"
19. android:targetPackage="com.xlth.cn.demo" android:label="Tests for My App" />
20. < /manifest>
< ?xml version="1.0" encoding="utf-8"?>
< manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xlth.cn.demo"
android:versionCode="1"
android:versionName="1.0">
< application android:icon="@drawable/icon" android:label="@string/app_name">
< uses-library android:name="android.test.runner" />
< activity android:name=".PullParseDemo"
android:label="@string/app_name">
< intent-filter>
< action android:name="android.intent.action.MAIN" />
< category android:name="android.intent.category.LAUNCHER" />
< /intent-filter>
< /activity>
< /application>
< uses-sdk android:minSdkVersion="7" />
< instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.xlth.cn.demo" android:label="Tests for My App" />
< /manifest>
Pull解析可以用于很多场合,例如接受google天气,rss新闻等,希望对大家有帮助
联系客服