Android解析
SAX解析
特点:
占用内存少,解析速度快
采用事件启动,不需要解析整个文档。而是按照内容顺序 看文档某个部分是否符合xml语法,如果符合就触发相应的事件,所谓的事件就是些回调方法(callback),这些方法定义在ContentHandler中
1 解析类AtomParser extends DefaultHandler
2 startDocument:当遇到文档的时候就触发这个事件 调用这个方法 可以在其中做些预处理工作
startElement: (String namespaceURI,String localName,String qName,Attributes atts)当遇开始标签的时候就会触发这个方法。
endElement(String uri,String localName,String name):当遇到结束标签时触发这个事件,调用此法可以做些善后工作。
charachers(char [] ch,int start,int length):当遇到xml内容时触发这个方法,用new String(ch,start,length)可以接受内容。
3 android.util.Xml.parse(xml内容, new AtomParser解析器);
DOM解析
整个XML文档独到内存中,树形结构,XML很大时不能用于手机
PULL解析
使用PULL解析XML
同SAX解析,性能和SAX一样。基于事件驱动。
产生的事件是一个数字,而非方法。
需要人为参与,调用API,才能解析相关元素(SAX自动调用)。
public List<Person> parseXML(InputStream in) throws XmlPullParserException,IOException {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(in, "UTF-8");
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
// 初始化
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
// 取开始节点中的属性和文本值
if ("person".equalsIgnoreCase(parser.getName())) {
person = new Person();
person.setId(parser.getAttributeValue(0));
} else if ("name".equalsIgnoreCase(parser.getName())) {
if (person != null) {
person.setName(parser.getText());
}
}
break;
case XmlPullParser.END_TAG:
if ("person".equalsIgnoreCase(parser.getName())) {
if (persons != null && person != null) {
persons.add(person);
}
}
break;
}
eventType = parser.next();// 进入下一个节点,触发相应事件
}
return persons;
}
使用PULL生成XML
public void saveXML(List<Person> persons, OutputStream os) throws IllegalArgumentException, IllegalStateException, IOException {
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(os, "UTF-8");
serializer.startDocument("UTF-8", true);// 生成XML头
serializer.startTag("", "persons");
for (Person person : persons) {
serializer.startTag("", "person");
serializer.attribute("", "id", String.valueOf(person.getId()));
serializer.startTag("", "name");
serializer.text(person.getName());
serializer.endTag("", "name");
serializer.endTag("", "persons");
}
serializer.endTag("", "persons");
serializer.endDocument();
os.flush();
os.close();
}
json解析
JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信
(1).解析Object
{
"name"
:
"android"
,
"version"
:
"iphone"
}
解析方法:
JSONObject demoJson = new JSONObject(jsonString);
String name = demoJson.getString("name");
String version = demoJson.getString("version");
System.out.println("name:"+name+",version:"+version);
(2).解析Array
{
"number"
:[1,2,3]}
解析方法:
JSONObject demoJson = new JSONObject(jsonString);
JSONArray numberList = demoJson.getJSONArray("number");
for(int i=0; i<numberList.length(); i++)
//因为数组中的类型为int,所以为getInt,其他getString,getLong同用
System.out.println(numberList.getInt(i));
}
{
"number"
:[[1],[2],[3]]}
//嵌套数组遍历
JSONObject demoJson = new JSONObject(jsonString);
JSONArray numberList = demoJson.getJSONArray("number");
for(int i=0; i<numberList.length(); i++){
//获取数组中的数组
System.out.println(numberList.getJSONArray(i).getInt(0));
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。