现在被广泛使用的XML的解析器主要有DOM和SAX两种
1,首先了解一下xml作为一种可扩展的标记语言,它主要包括几部分
i. xml声明、1.version encoding2.<?xmlversion=”1.0” encoding=”UTF-8”?>
ii. Xml:根目录(根元素)
iii. Xml:子元素
iv. Xml:注释 <!-- 注释的内容 -- >
下面就是一种简单的xml文件
- <?xml version="1.0" encoding="UTF-8"?>
- <students>
- <student stuId="001">
- <stuName>公主</stuName>
- <stuAge>19</stuAge>
- </student>
- <student stuId="002">
- <stuName>王子</stuName>
- <stuAge>20</stuAge>
- </student>
- <student stuId="003">
- <stuName>灰姑娘</stuName>
- <stuAge>19</stuAge>
- </student>
- </students>
接下来首先将这个student类进行一个封装
接下来就是对这个xml文件进行解析
- public class Student {
- private int id;
- private String name;
- private int age;
- 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 int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- @Override
- public String toString() {
- // TODO Auto-generated method stub
- return "id:"+id+",name:"+name+";age:"+age;
- }
- }
public List<Student> getList(){return list;//返回的是Student这个对象中的属性,在student的类中已经写了对应的方法}@Overridepublic void characters(char[] arg0,int arg1,int arg2) throws SAXException {//接收元素中字符数据的通知,同时将异常总的异常抛出// TODO Auto-generated method stubsuper.characters(arg0,arg1,arg2);String info = new String(arg0,arg2);if(tag!=null){if(tag.equals("stuName")){stu.setName(info);}if(tag.equals("stuAge")){stu.setAge(Integer.parseInt(info.trim()));}}}@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stubsuper.endDocument();}@Overridepublic void endElement(String arg0,String arg1,String arg2)throws SAXException {// TODO Auto-generated method stubsuper.endElement(arg0,arg2);if(arg2.equals("student")){list.add(stu);stu = null;//每一次访问完了一个根元素事件都将stu置空}tag = null;//同样将tag标签指定的位置置空}@Overridepublic void startDocument() throws SAXException {// TODO Auto-generated method stubsuper.startDocument();list = new ArrayList<Student>();//从list中开始访问}@Overridepublic void startElement(String arg0,String arg2,Attributes arg3) throws SAXException {// TODO Auto-generated method stubsuper.startElement(arg0,arg2,arg3);if(arg2.equals("student")){stu = new Student();String id_str = arg3.getValue("stuId");stu.setId(Integer.parseInt(id_str.trim()));}tag = arg2;}} @H_301_40@ 在使用sax进行解析的时候用到了的方法可以参考jdk-api文档
- import java.util.ArrayList;
- import java.util.List;
- import org.xml.sax.Attributes;
- import org.xml.sax.SAXException;
- import org.xml.sax.helpers.DefaultHandler;
- public class MySax extends DefaultHandler{
- List<Student> list = null;//使用一个list来装Student这个类
- Student stu = null;
- String tag;<pre name="code" class="java" style="font-size: 14px; line-height: 26px;">//--存储xml解析到哪个标签上了
4,使用一个demo类进行测试
- import java.util.List;
- import javax.xml.parsers.SAXParser;
- import javax.xml.parsers.SAXParserFactory;
- public class Demo {
- public static void main(String[] args) throws Exception{
- //--1、获得解析器的工厂
- SAXParserFactory factory = SAXParserFactory.newInstance();
- //--2、从工厂获得解析器
- SAXParser parser = factory.newSAXParser();
- //--3、实例化事件驱动对象
- MySax sax = new MySax();
- //--4、把xml文件与事件驱动绑定到解析器上
- parser.parse("Students.xml",sax);
- //--5、获得xml文件中的对象
- List<Student> list = sax.getList();
- for(Student stu:list){
- System.out.println(stu);
- }
- }
- }
- 关于另一中dom解析已经编写可以去我的博客中找找