xml解析-续-之Sax

Sax 解析:

public class SaxXml {
public static List<Person> getXml(InputStream inputStream) throws Exception {

//获取解析工厂
SAXParserFactory factory =SAXParserFactory.newInstance();

//解析器
SAXParser saxParser = factory.newSAXParser();

//实例化解析器所需要的halder对象
SaxHalder saxHalder = new SaxHalder();

//进行解析
saxParser.parse(inputStream,saxHalder);
return saxHalder.getPerList();
}

/**DefaultHandler类是SAX2事件处理程序的默认基类。它继承了EntityResolver、DTDHandler、ContentHandler和ErrorHandler这四个接口。包含这四个接口的所有方法,所以我们在编写事件处理程序时,可以不用直接实现这四个接口,而继承该类,然后重写我们需要的方法*/
}

 

/**

*实现了defaultHandler

*/

public class SaxHalder extends DefaultHandler {
List<Person> perList = new ArrayList<Person>();
Person person ;
String tag = "";

@Override
public void startDocument() throws SAXException {
perList = new ArrayList<Person>();
}

@Override
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
if ("person".equals(name)) {
person = new Person();
person.setId(Integer.valueOf(attributes.getValue("id")));
}
tag = name;
}


//该方法中的ch把所解析的xml的所有数据都保存进来,且ch初始化为2K数据。 start是一个节点">"的位置.

//length就是">"到下个"<"的长度
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String date = new String(ch,start,length);
if ("name".equals(tag)) {
person.setName(date);
}else if ("age".equals(tag)) {
person.setAge(Integer.valueOf(date));
}
}

@Override
public void endElement(String uri, String localName, String name)
throws SAXException {
if ("person".equals(name)) {
perList.add(person);
}
tag ="";
}
public List<Person> getPerList() {
return perList;
}

public void setPerList(List<Person> perList) {
this.perList = perList;
}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值