SAX解析XML文件

抛砖引玉,是高手,看代码就行,一看就懂,为了节约时间,注释和解说就不写了,累赘

package com.van.SAXparse;

public class Person
{
private int id;

private String name;

private Short age;

private int height;

private String profession;

public int getId()
{
return id;
}

public void setId(int id)
{
this.id = id;
}

public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}

public Short getAge()
{
return age;
}

public void setAge(Short age)
{
this.age = age;
}

public int getHeight()
{
return height;
}

public void setHeight(int height)
{
this.height = height;
}

public String getProfession()
{
return profession;
}

public void setProfession(String profession)
{
this.profession = profession;
}
}
package com.van.SAXparse;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import android.content.Context;

public class XMLContentHandler extends DefaultHandler
{
private static List<Person> persons = null;

private Person currentPerson;

static Context context;

private String tagName = null;// 当前解析的元素标签

public List<Person> getPersons()
{
return persons;
}

/**
* 接收文档的开始通知
*
*
@throws SAXException
*/
@Override
public void startDocument() throws SAXException
{
persons = new ArrayList<Person>();
}

@Override
public void endDocument() throws SAXException
{
super.endDocument();
}

/**
* 接收元素开始的通知
*
*
@param uri 元素的命名空间
*
@param localName 元素的本地名称(不带前缀)
*
@param qName 元素的限定名(带前缀)
*
@param attributes 元素的属性集合
*
@throws SAXException
*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
{
if (localName.equals("person"))
{
currentPerson = new Person();
currentPerson.setId(Integer.parseInt(attributes.getValue("id")));
}
this.tagName = localName;
}

/**
* 接收文档的结尾的通知
*
*
@param uri 元素的命名空间
*
@param localName 元素的本地名称(不带前缀)
*
@param qName 元素的限定名(带前缀)
*
@throws SAXException
*/
@Override
public void endElement(String uri, String localName, String qName) throws SAXException
{
if (localName.equals("person"))
{
persons.add(currentPerson);
currentPerson = null;
}
this.tagName = null;
}

/**
* 接收字符数据的通知
*
*
@param ch
*
@param start
*
@param length
*
@throws SAXException
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException
{
if (tagName != null)
{
String data = new String(ch, start, length);
if (tagName.equals("name"))
{
this.currentPerson.setName(data);
}
else if (tagName.equals("age"))
{
this.currentPerson.setAge(Short.parseShort(data));
}
else if (tagName.equals("height"))
{
this.currentPerson.setHeight(Integer.parseInt(data));
}
else if (tagName.equals("profession"))
{
this.currentPerson.setProfession(data);
}
}
}

public static List<Person> readXML(String xmlPath)
{
try
{
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
// 创建解析器
SAXParser saxParser = saxParserFactory.newSAXParser();
// 获取事件源
XMLReader xmlReader = saxParser.getXMLReader();
// 设置处理器
XMLContentHandler xmlContentHandler = new XMLContentHandler();
xmlReader.setContentHandler(xmlContentHandler);
// 解析xml文档
xmlReader.parse(new InputSource(new URL(xmlPath).openStream()));
// xmlReader.parse(new
// InputSource(context.getAssets().open(xmlPath)));
persons = xmlContentHandler.getPersons();
}
catch (ParserConfigurationException e)
{
e.printStackTrace();
}
catch (SAXException e)
{
e.printStackTrace();
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return persons;
}

}
package com.van.SAXparse;

import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class SAXparseActivity extends Activity
{
private Button button;

private Person person;

private TextView textView;

private List<Person> persons;

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button) findViewById(R.id.button);
textView = (TextView) findViewById(R.id.showPerson);
button.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
persons = XMLContentHandler.readXML("D:/person.xml");
for (int i = 0; i < persons.size(); i++)
{
person = persons.get(i);
person.getAge();
person.getName();
person.getHeight();
person.getProfession();
person.getId();
String string = "";
textView.setText("ID:" + person.getId());
}
}
});
}
}





原文地址:https://www.cnblogs.com/jh5240/p/2311086.html