PULLSAXDOM解析XML.docx
- 文档编号:30382030
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:15
- 大小:49.85KB
PULLSAXDOM解析XML.docx
《PULLSAXDOM解析XML.docx》由会员分享,可在线阅读,更多相关《PULLSAXDOM解析XML.docx(15页珍藏版)》请在冰豆网上搜索。
PULLSAXDOM解析XML
PULL、SAX、PULL解析XML
android平台上解析xml的常见的工具有三种:
dom,sax,pull。
第一种是DOM,
它的特点是一次全部加载,如果对于数据量小的情况下,它的效率还可以,如果XML文件很大的情况下,速度就会慢起来。
第二种方式SAX:
SAX是基于事件驱动的。
当然android的事件机制是基于回调函数的,在用SAX解析xml文档时候,在读取到文档开始和结束标签时候就会回调一个事件,在读取到其他节点与内容时候也会回调一个事件。
第三种方式PULL:
这种方式也是基于事件驱动的,与SAX方式一样,只不过PULL方式读xml回调方法返回的是数字。
下面分别使用它们解析xml文件。
在assert下放置persons.xml文件:
[html]viewplaincopy
1.
xml version="1.0" encoding="utf-8"?
>
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
创建Activity文件准备处理文件并显示:
[java]viewplaincopy
1.import java.io.IOException;
2.import java.io.InputStream;
3.import java.util.ArrayList;
4.import java.util.HashMap;
5.import java.util.List;
6.import java.util.Map;
7.import android.app.Activity;
8.import android.content.res.AssetManager;
9.import android.os.Bundle;
10.import android.view.View;
11.import android.view.View.OnClickListener;
12.import android.widget.Button;
13.import android.widget.ListView;
14.import android.widget.SimpleAdapter;
15.
16.public class XMLActivity extends Activity implements OnClickListener{
17. /** Called when the activity is first created. */
18. private Button btn_dom;
19. private Button btn_sax;
20. private Button btn_pull;
21. private ListView listview;
22. @Override
23. public void onCreate(Bundle savedInstanceState) {
24. super.onCreate(savedInstanceState);
25. setContentView(R.layout.main);
26. init();
27. }
28.private void init(){
29. btn_dom=(Button) findViewById(R.id.dom);
30. btn_sax=(Button) findViewById(R.id.sax);
31. btn_pull =(Button) findViewById(R.id.pull);
32. listview =(ListView) findViewById(R.id.list);
33. btn_dom.setOnClickListener(this);
34. btn_sax.setOnClickListener(this);
35. btn_pull.setOnClickListener(this);
36.}
37. public void onClick(View v) {
38. // TODO Auto-generated method stub
39. int id = v.getId();
40. List
41. InputStream is = null;
42. AssetManager manager = getAssets();
43. try
44. { //读取xml文件。
45. is = manager.open("persons.xml");
46. } catch (IOException e)
47. {
48. e.printStackTrace();
49. }
50. switch (id)
51. {
52. case R.id.dom:
//使用dom解析
53. try
54. {
55. list = new DomParseService().getPersonsByParseXml(is);
56. showUI(list);
57. } catch (Exception e)
58. {
59. e.printStackTrace();
60. }
61. break;
62. case R.id.sax:
//使用sax解析
63. try
64. {
65. list = new SAXParseService().getPersonsByParseXml(is);
66. showUI(list);
67. } catch (Exception e)
68. {
69. e.printStackTrace();
70. }
71. break;
72. case R.id.pull:
//使用pull解析
73. try
74. {
75. list = new PullParseService().getPersonsByParseXml(is);
76. showUI(list);
77. } catch (Exception e)
78. {
79. e.printStackTrace();
80. }
81. break;
82. default:
83. break;
84. }
85. try
86. {
87.
88. is.close();
89. } catch (IOException e)
90. {
91. // TODO Auto-generated catch block
92. e.printStackTrace();
93. }
94. }
95. public void showUI(List
96. {
97. List
98. for (Person p :
list)
99. {
100. Map
101. map.put("id", p.getId());
102. map.put("name", p.getName());
103. map.put("age", p.getAge());
104. data.add(map);
105. }
106. String[] from =
107. { "id", "name", "age" };
108. int[] to =
109. { R.id.tv_id, R.id.tv_name, R.id.tv_age };
110. SimpleAdapter adapter = new SimpleAdapter(this, data,
111. R.layout.person_list_item, from, to);
112. listview.setAdapter(adapter);
113. }
114.}
创建解析xml文件的接口:
[java]viewplaincopy
1.import java.io.InputStream;
2.import java.util.List;
3.
4.public interface IXmlParseService {
5.
6. public List
7.}
dom解析:
[java]viewplaincopy
1.import java.io.InputStream;
2.import java.util.ArrayList;
3.import java.util.List;
4.
5.import javax.xml.parsers.DocumentBuilder;
6.import javax.xml.parsers.DocumentBuilderFactory;
7.
8.import org.w3c.dom.Document;
9.import org.w3c.dom.Element;
10.import org.w3c.dom.Node;
11.import org.w3c.dom.NodeList;
12.
13.import android.util.Log;
14.
15.public class DomParseService implements IXmlParseService {
16.
17. public List
18. // TODO Auto-generated method stub
19. List
20. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
21. DocumentBuilder build =factory.newDocumentBuilder();
22. Document document = build.parse(is);
23. Element rootElement = document.getDocumentElement();
24. NodeList nodeList = rootElement.getElementsByTagName("person");
25. if(nodeList==null||nodeList.getLength()==0)
26. {
27. return null;
28. }
29. list = new ArrayList
30. for(int i=0;i 31. { 32. Person person = new Person(); 33. Element element = (Element) nodeList.item(i); 34. // 得到根节点属性: id 35. int id = Integer.parseInt(element.getAttribute("id")); 36. person.setId(id); 37. /*得到子节点*/ 38. NodeList childnodes = element.getChildNodes(); 39. for(int j=0; j 40. Node childNode = (Node)childnodes.item(j); 41. 42. if(childNode.getNodeType() == Node.ELEMENT_NODE){ 43. Element childElement = (Element)childNode; 44. if("name".equals(childElement.getNodeName())){ 45. person.setName(childElement.getFirstChild().getNodeValue()); 46. } 47. else if("age".equals(childElement.getNodeName())){ 48. person.setAge(new Short(childElement.getFirstChild().getNodeValue())); 49. } 50. } 51. } 52. list.add(person); 53. } 54. 55. return list; 56. } 57. 58.} sax解析: [java]viewplaincopy 1.import java.io.InputStream; 2.import java.util.ArrayList; 3.import java.util.List; 4. 5.import javax.xml.parsers.SAXParser; 6.import javax.xml.parsers.SAXParserFactory; 7. 8.import org.xml.sax.Attributes; 9.import org.xml.sax.SAXException; 10.import org.xml.sax.helpers.DefaultHandler; 11. 12.import android.os.Handler; 13.import android.util.Log; 14. 15.public class SAXParseService implements IXmlParseService { 16. 17. public List 18. // TODO Auto-generated method stub 19. SAXParserFactory factory = SAXParserFactory.newInstance(); 20. SAXParser parser =factory.newSAXParser(); 21. MyHandler handler = new MyHandler(); 22. parser.parse(is,handler); 23. return handler.getList(); 24. } 25. private class MyHandler extends DefaultHandler 26. { 27. private List 28. private Person person; 29. private String currentTag; 30. private List 31. { 32. return list; 33. } 34. @Override 35. public void startDocument() throws SAXException 36. { 37. list = new ArrayList 38. } 39. 40. @Override 41. public void endDocument() throws SAXException 42. { 43. super.endDocument(); 44. } 45. 46. @Override 47. public void startElement(String uri, String localName, String qName, 48. Attributes attributes) throws SAXException 49. { 50. 51. if("person".equals(qName)) 52. { 53. person =new Person(); 54. person.setId(Integer.parseInt(attributes.getValue("id"))); 55. }else if("na
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PULLSAXDOM 解析 XML