【JAXP】SAX方式解析XML文件

来源:互联网 发布:被收购的中国品牌 知乎 编辑:程序博客网 时间:2024/04/30 08:01
package cn.jbit.xml;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import org.xml.sax.helpers.DefaultHandler;public class SAXTest {public static void main(String[] args) throws Exception {//创建SAX解析器工厂对象SAXParserFactory sax = SAXParserFactory.newInstance();//通过SAX解析器工厂创建SAX解析器SAXParser parser = sax.newSAXParser();//获取XML文档读取器XMLReader reader = parser.getXMLReader();//创建XML内容处理器Handler handler = new Handler();//设置文档读取器的内容处理程序reader.setContentHandler(handler);//开始解析XML文档reader.parse("E:\\2.xml");//获取解析到的集合对象List<Student> list = handler.getStudents();//遍历集合for (Student s : list) {System.out.println(s.getName() + "..." + s.getSex());}}}class Handler extends DefaultHandler {//用于保存读取到的学生集合private List<Student> list = null;//用于临时保存学生对象Student s = null;//存储正在遍历的标签名String nodeTagName = null;//取得遍历取得的集合public List<Student> getStudents() {return list;}@Overridepublic void startElement(String uri, String localName, String qName,Attributes atts) throws SAXException {nodeTagName = qName;if ("Student".equals(nodeTagName))s = new Student();}@Overridepublic void startDocument() throws SAXException {list = new ArrayList<Student>();}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {nodeTagName = null;if ("Student".equals(qName))list.add(s);}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {String text = new String(ch, start, length);if ("Id".equalsIgnoreCase(nodeTagName))s.setId(text);if ("Name".equalsIgnoreCase(nodeTagName))s.setName(text);if ("Age".equalsIgnoreCase(nodeTagName))s.setAge(text);if ("Sex".equalsIgnoreCase(nodeTagName))s.setSex(text);}}

0 0
原创粉丝点击