SAX解析。。。不想写
BB两句
不想写,都是差不多的套路。
走起
首先获取工厂类,然后获取用于解析xml的对象,SAX和DOM是java提供的,不用导入jar包什么的。
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
SAXParser saxParser = saxParserFactory.newSAXParser();
然后,开始解析,老套路,android不可能把获取的xml字符串写到文件中,太麻烦,看上一篇DOM,里面有写方法。
UserHandler userHandler = new UserHandler();
saxParser.parse(new FileInputStream("src/user.xml"),userHandler);
看UserHandler这是什么鬼,这个是自己写的类继承了DefaultHandler,这个DefaultHandler又是什么鬼呢。SAX解析最重要的就是这个类了,所有的解析操作都在这个类里面。
继承Defaulthandler复写他的方法
看代码
public class UserHandler extends DefaultHandler {
private UserBean userBean = null;
private List<UserBean> userBeanList = null;
private String name;
/**
* 解析到根节点执行,基本上算是只执行一次,可以在这里进行相关初始化操作
* @throws SAXException
*/
@Override
public void startDocument() throws SAXException {
super.startDocument();
userBeanList = new ArrayList<>();
}
/**
* 解析完成执行该方法,其他方法还有很多,可复写之后打印生命周期进行了解
* @throws SAXException
*/
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
/**
* 解析到每个节点的时候调用该方法,也就是多次调用,调用次数看xml子节点有多少,参数直接打印出来查看
* @param uri
* @param localName
* @param qName 节点名字
* @param attributes 属性
* @throws SAXException
*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
name = qName;
if ("user".equals(qName)){
userBean = new UserBean();
for (int i = 0; i < attributes.getLength(); i++) {
userBean.setId(attributes.getValue(i));
}
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
if ("user".equals(qName)){
userBeanList.add(userBean);
userBean = null;
}
}
/**
* 嗯哼,打印出来看看,new String(ch, start, length).trim();这个是获取当前节点的值,new String(ch)可以打印出看看,我第一次看也是懵逼了
* @param ch
* @param start
* @param length
* @throws SAXException
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
String str = new String(ch, start, length).trim();
if (!"".equals(str)) {
if ("name".equals(name)){
userBean.setName(str);
}else if ("age".equals(name)){
userBean.setAge(str);
}
}
}
public List<UserBean> getUserBeanList(){
return userBeanList;
}
}
UserBean
public class UserBean {
private String name;
private String age;
private String id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "UserBean{" +
"name='" + name + '\'' +
", age=" + age +
", id=" + id +
'}';
}
}
简单解析到此结束