现在被广泛使用的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>
<p>2、 SAX解析</p><p>a)事件驱动的解析:根元素出发的事件、结束的事件、子元素开始出发的事件、结束的事件、文本解析触发的事件</p><p>b) 解析器:ContentHandler</p><p>c)使用其子类:DefaultHandler</p><p>i.主要使用的方法:startDocument、endDocument、startElement、endElement、charachters</p> 使用的方法可以参考jdk-api文档可以参考:http://download.csdn.net/detail/zhangvalue/9203511
接下来首先将这个student类进行一个封装
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; } }接下来就是对这个xml文件进行解析
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解析到哪个标签上了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;}} 在使用sax进行解析的时候用到了的方法可以参考jdk-api文档
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解析已经编写可以去我的博客中找找
具体代码可以下载链接:http://download.csdn.net/download/zhangvalue/9204199