说明
XML是一种常用的数据格式,在Android中一般常用DOM,SAX,PULL三种方式解析。以下分别介绍这三种解析方法的使用,个人觉得使用PULL方式较为简单,本篇先介绍DOM方式解析XML数据。
#实例
我们可以在项目自带的assets文件夹中新建一个xml文件保存xml数据以供解析,以下是我在assets文件夹下建的userinfo.xml。
1 2 3 4 5 6 7 8 9 10 11
| <?xml version="1.0" encoding="UTF-8"?> <root> <userinfo> <username>Carlos</username> <age>21</age> </userinfo> <userinfo> <username>Jack</username> <age>19</age> </userinfo> </root>
|
Dom解析类
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 78
| package com.carlos.xml;
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.app.Activity; import android.os.Bundle; import android.util.Log;
public class DomParseXml extends Activity{
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); parseXml(); } List<UserInfo> parseXml(){ List<UserInfo> infos=new ArrayList<UserInfo>(); DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder=factory.newDocumentBuilder(); InputStream inputStream=getResources().getAssets().open("userinfo.xml"); Document document=builder.parse(inputStream); Element root=document.getDocumentElement(); NodeList nodes=root.getElementsByTagName("userinfo"); for(int i=0;i<nodes.getLength();i++){ UserInfo info=new UserInfo(); Node item=nodes.item(i); NodeList list=item.getChildNodes(); for(int j=0;j<list.getLength();j++){ Node node=list.item(j); String nodeName=node.getNodeName(); if (nodeName.equals("username")) { info.setUsername(node.getFirstChild().getNodeValue()); Log.i("userinfo", node.getFirstChild().getNodeValue()); }else if (nodeName.equals("age")) { info.setAge(node.getFirstChild().getNodeValue()); Log.i("userinfo", node.getFirstChild().getNodeValue()); } } infos.add(info); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return infos; } }
|
Logcat日志中打印出的结果
