您的位置:首页 > 移动开发 > Android开发

Android__三种XML文件解析方法

2012-04-24 14:09 351 查看
XML文件--->代表数据(有结构描述)。

1、DOM解析


public List<Person> loadPersons() {

List<Person> list=new ArrayList<Person>();

try {

Document doc=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse

(this.getClass().getResourceAsStream(

"/text.xml"));

//获得根节点

Element root=doc.getDocumentElement();

//NodeList nodeList= root.getChildNodes();

NodeList nodeList=root.getElementsByTagName("person");

for(int i=0;i<nodeList.getLength();i++){

Element el=(Element)nodeList.item(i);

System.out.println(i+":"+el);

Person p=new Person();

//把元素中内容读取出来,存到Person中

p.setId(new Long(el.getAttribute("id")));

String name=el.getElementsByTagName("name").item(0).getTextContent();

p.setName(name);

String age=el.getElementsByTagName("age").item(0).getTextContent();

p.setAge(new Integer(age));

list.add(p);

}

} catch (Exception e) {

e.printStackTrace();

}

return list;

}

2、SAX解析

public List<Person> loadPersons() {

final List<Person> list=new ArrayList<Person>();

try{

//创建SAX解析器

SAXParser parser=SAXParserFactory.newInstance().newSAXParser();

parser.parse(this.getClass().getResourceAsStream(

"/text.xml"), new DefaultHandler(){

private int c=0;

private String tag;

private Person p;

@Override

public void startElement(String uri, String localName,

String qName, Attributes attributes)

throws SAXException {

System.out.println((c++)+",<"+qName+">");

tag=qName;

if("person".equals(tag)){

//表示一个person开始

p=new Person();

p.setId(new Long(attributes.getValue("id")));

list.add(p);

}

}

@Override

public void endElement(String uri, String localName,

String qName) throws SAXException {

System.out.println((c++)+",</"+qName+">");

tag=null;

}

@Override

public void characters(char[] ch, int start, int length)

throws SAXException {

String v=new String(ch,start,length);

System.out.println((c++)+",text:"+v);

if("name".equals(tag)){

p.setName(v);

}

else if("age".equals(tag)){

p.setAge(new Integer(v));

}

}

});

}

catch(Exception e){

e.printStackTrace();

}

return list;

}

3、PULL解析 与SAX类似,不过PULL解析面向过程,SAX解析面向对象

public List<Person> loadPersons() {

List<Person> list = new ArrayList<Person>();

try {

//获得一个PUll解析器

//XmlPullParser parser=XmlPullParserFactory.newInstance().newPullParser();

XmlPullParser parser=Xml.newPullParser();

//设置解析源(内容)

parser.setInput(this.getClass().getResourceAsStream(

"/text.xml"), "utf-8");

//开始解析,返回解析到的内容事件类型

int eventType= parser.getEventType();

String tag=null;

Person p=null;

int c=0;

//循环直到读到文档结束

while(eventType!=XmlPullParser.END_DOCUMENT){

//读到的是什么类型的内容

if(eventType==XmlPullParser.START_TAG){

//读到开始标签

tag=parser.getName();

System.out.println((c++)+"<"+tag+">");

if("person".equals(tag)){

p=new Person();

//读出id属性

p.setId(Long.parseLong(parser.getAttributeValue(null, "id")));

list.add(p);

}

}

else if(eventType==XmlPullParser.END_TAG){

System.out.println((c++)+"</"+tag+">");

//读到结束标签

tag=null;

}

else if(eventType==XmlPullParser.TEXT){

//读到文本内容

String v=parser.getText();

System.out.println((c++)+"text:"+v);

if("name".equals(tag)){

p.setName(v);

}

else if("age".equals(tag)){

p.setAge(new Integer(v));

}

}

eventType=parser.next();

}

} catch (Exception e) {

e.printStackTrace();

}

return list;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: