adroid解析XML三种方式
废话少说,直接上代码:
Pull 解析 跳至 [1] [2] [3] [全屏预览]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.util.Xml;
import com.leo.sax_parser.model.Person;
public class PullParser {
public static List<Person> readXML(InputStream inputstream)
throws XmlPullParserException, IOException {
List<Person> persons = null ;
XmlPullParser parser = Xml.newPullParser();
parser.setInput(inputstream, "UTF-8" );
int eventCode = parser.getEventType();
Person person = null ;
while (eventCode != XmlPullParser.END_DOCUMENT) {
switch (eventCode) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break ;
case XmlPullParser.START_TAG:
if ( "person" .equals(parser.getName())) {
person = new Person();
person.setId(parser.getAttributeValue( 0 ));
} else if (person != null ){
if ( "name" .equals(parser.getName())) {
person.setName(parser.nextText());
} else if ( "age" .equals(parser.getName())){
person.setAge(Integer.parseInt(parser.nextText()));
} else if ( "phoneNumber" .equals(parser.getName())){
person.setPhoneNumber(Integer.parseInt(parser.nextText()));
}
}
break ;
case XmlPullParser.END_TAG:
if ( "person" .equals(parser.getName()) && person!= null ) {
persons.add(person);
person = null ;
}
break ;
default :
break ;
}
eventCode = parser.next();
}
return persons;
}
}
|
SAX 解析 跳至 [1] [2] [3] [全屏预览]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
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 android.util.Log;
import com.leo.sax_parser.model.Person;
public class SAX_handler extends DefaultHandler {
private static final String Tag = "SAX_handler" ;
private List<Person> persons;
private String perTag;
private Person person;
public List<Person> getPersons() {
return persons;
}
@Override
public void startDocument() throws SAXException {
//初始化用于存放person对象的persons,用于存放读取到的相应的信息。
persons = new ArrayList<Person>();
Log.i(Tag, "startDocument" );
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if ( "person" .equals(localName)) {
for ( int i = 0 ; i < attributes.getLength(); i++) {
Log.i(Tag, "attributeName:" + attributes.getLocalName(i)
+ "attributeValue:" + attributes.getValue(i));
person = new Person();
person.setId(attributes.getValue(i));
}
}
perTag = localName;
Log.i(Tag, qName + "startElement***" );
}
@Override
public void characters( char [] ch, int start, int length)
throws SAXException {
// super.characters(ch, start, length);
String data = new String(ch, start, length);
if (! "" .equals(data.trim())) {
Log.i(Tag, "Content:" + data);
}
if ( "name" .equals(perTag)) {
person.setName(data);
} else if ( "age" .equals(perTag)) {
person.setAge(Integer.parseInt(data));
} else if ( "phoneNumber" .equals(perTag)) {
person.setPhoneNumber(Integer.parseInt(data));
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
Log.i(Tag, qName + "endElement" );
if (person != null && "person" .equals(localName)) {
persons.add(person);
person = null ;
}
perTag = null ;
}
@Override
public void endDocument() throws SAXException {
Log.i(Tag, "endDocument" );
}
}
|
Dom 解析 跳至 [1] [2] [3] [全屏预览]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
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.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import android.util.Log;
import com.leo.sax_parser.model.Person;
public class DomParser {
private static final String Tag = "DomParser" ;
public static List<Person> readXMLByDom(InputStream input)
throws ParserConfigurationException, SAXException, IOException {
List<Person> persons = new ArrayList<Person>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(input);
Element root = document.getDocumentElement();
NodeList nodes = root.getElementsByTagName( "person" );
for ( int i = 0 ; i < nodes.getLength(); i++) {
Element element = (Element) nodes.item(i);
Person person = new Person();
person.setId(element.getAttribute( "id" ));
NodeList childNodes = element.getChildNodes();
Log.i(Tag, childNodes.getLength() + "" );
for ( int j = 0 ; j < childNodes.getLength(); j++) {
Node child = childNodes.item(j);
if (child.getNodeType() != Node.ELEMENT_NODE) { // 解决getChildNodes().getLength()与实际不符的问题
continue ;
}
Element childElement = (Element) child;
Log.i( "DomParser" , childElement.getNodeName() + ":"
+ childElement.getTextContent().trim());
if ( "name" .equals(childElement.getNodeName())) {
person.setName(childElement.getTextContent().trim());
} else if ( "age" .equals(childElement.getNodeName())) {
person.setAge(Integer.parseInt(childElement
.getTextContent().trim()));
} else if ( "phoneNumber" .equals(childElement.getNodeName())) {
person.setPhoneNumber(Integer.parseInt(childElement
.getFirstChild().getNodeValue()));
}
}
persons.add(person);
}
return persons;
}
}
|
adroid解析XML三种方式相关推荐
- 解析XML三种方式(PULL、SAX、DOM)
本篇博客重点介绍Android中三种解析XML的方式,包括PULL.SAX.DOM,当然不止这些,还可以用第三方的jar包提供的解析,只是这三种在Android中比较常用吧.再顺便介绍一下Androi ...
- Android解析XML三种方式(PULL、SAX、DOM)
本篇博客重点介绍Android中三种解析XML的方式,包括PULL.SAX.DOM,当然不止这些,还可以用第三方的jar包提供的解析,只是这三种在Android中比较常用吧.再顺便介绍一下Androi ...
- android xml解析的三种方式
2019独角兽企业重金招聘Python工程师标准>>> 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式.最近做了 ...
- XML解析的三种方式(dom,sax,dom4j)
1.Dom解析: 要解析的xml文件内容: <?xml version="1.0" encoding="utf-8" standalone="n ...
- xml文件解析的三种方式
SAX解析XML SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备. SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析 ...
- 爬虫之数据解析的三种方式
一,正则表达式解析 re正则就不写了,前面已经写入一篇很详细的正则表达式模块了~ 而且,在爬虫中,下面两种方式用的多一些~ 正则表达式:https://www.cnblogs.com/peng104/ ...
- Python数据解析的三种方式
一,正则表达式解析 在爬虫中,下面两种方式用的多一些~ 大致用法: pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i&g ...
- 爬虫数据解析的三种方式
一.正则表达式解析 常用正则表达式回顾:单字符:. : 除换行以外所有字符[] :[aoe] [a-w] 匹配集合中任意一个字符\d :数字 [0-9]\D : 非数字\w :数字.字母.下划线.中文 ...
- 爬虫之网络数据解析的三种方式---正则表达式、XPath数据解析库、BeautifulSoup数据解析库
1.正则表达式 爬虫的四个主要步骤: 明确目标(要知道你准备取哪个范围或者网站上取搜索) 爬(将所有网站的内容全部爬下来) 取(取掉对我们没用的数据) 处理数据(按照我们想要的方式存储和使用) 什么是 ...
最新文章
- Redhat7开机图形或文字界面
- cuda runtime error (59) : device-side assert triggered when running transfer_learning_
- eclipsse 关闭 方法提示_MacOS10.15.7关闭AppStore右上角小红标提示及系统更新右上角小红标提示的方法...
- 数据挖掘:分享两个Pandas使用小陷阱
- cf1526 C Potions
- Intel的AVX2指令集解读
- [转载].NET开发常用的10条实用代码
- LINGO 11.0安装教程
- select2多选设置select多选,select2取值和赋值
- Unity2017安装
- 用计算机画频率分布直方图,频率分布直方图
- python-lambda(匿名函数)原理与应用
- java开发工具-->IDEA
- codeforce 427 C. Checkposts(tarjan 强连通分量)
- EIE稀疏矩阵乘法硬件模拟
- 大前端 - react - 服务端渲染 - Next.js
- stm32单片机屏幕一直闪_基于STM32单片机实现屏幕休眠后OLED屏幕滚动效果
- 操作系统形式化验证实践教程(7) - C代码的自动验证
- 如何在wpf中使用winform控件或者winform的自定义控件
- JSP与JavaScript的区别