xml的两种解析方式sax和dom解析的区别

前端之家收集整理的这篇文章主要介绍了xml的两种解析方式sax和dom解析的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

现在被广泛使用的XML的解析器主要有DOM和SAX两种

1,首先了解一下xml作为一种可扩展的标记语言,它主要包括几部分

i. xml声明、1.version encoding2.<?xmlversion=”1.0” encoding=”UTF-8”?>

ii. Xml:根目录(根元素)

iii. Xml:子元素

iv. Xml:注释 <!-- 注释的内容 -- >

下面就是一种简单的xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <students>
  3. <student stuId="001">
  4. <stuName>公主</stuName>
  5. <stuAge>19</stuAge>
  6. </student>
  7. <student stuId="002">
  8. <stuName>王子</stuName>
  9. <stuAge>20</stuAge>
  10. </student>
  11. <student stuId="003">
  12. <stuName>灰姑娘</stuName>
  13. <stuAge>19</stuAge>
  14. </student>
  15. </students>
  1. <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
  1.  
接下来首先将这个student类进行一个封装
  1. public class Student {
  2. private int id;
  3. private String name;
  4. private int age;
  5. public int getId() {
  6. return id;
  7. }
  8. public void setId(int id) {
  9. this.id = id;
  10. }
  11. public String getName() {
  12. return name;
  13. }
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17. public int getAge() {
  18. return age;
  19. }
  20. public void setAge(int age) {
  21. this.age = age;
  22. }
  23. @Override
  24. public String toString() {
  25. // TODO Auto-generated method stub
  26. return "id:"+id+",name:"+name+";age:"+age;
  27. }
  28. }
接下来就是对这个xml文件进行解析
  1. import java.util.ArrayList;
  2. import java.util.List;
  3.  
  4. import org.xml.sax.Attributes;
  5. import org.xml.sax.SAXException;
  6. import org.xml.sax.helpers.DefaultHandler;
  7.  
  8. public class MySax extends DefaultHandler{
  9.  
  10. List<Student> list = null;//使用一个list来装Student这个类
  11. Student stu = null;
  12. 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;}} @H_301_40@ 在使用sax进行解析的时候用到了的方法可以参考jdk-api文档
4,使用一个demo类进行测试
  1. import java.util.List;
  2.  
  3. import javax.xml.parsers.SAXParser;
  4. import javax.xml.parsers.SAXParserFactory;
  5.  
  6. public class Demo {
  7.  
  8. public static void main(String[] args) throws Exception{
  9.  
  10. //--1、获得解析器的工厂
  11. SAXParserFactory factory = SAXParserFactory.newInstance();
  12. //--2、从工厂获得解析器
  13. SAXParser parser = factory.newSAXParser();
  14. //--3、实例化事件驱动对象
  15. MySax sax = new MySax();
  16. //--4、把xml文件与事件驱动绑定到解析器上
  17. parser.parse("Students.xml",sax);
  18. //--5、获得xml文件中的对象
  19. List<Student> list = sax.getList();
  20. for(Student stu:list){
  21. System.out.println(stu);
  22. }
  23. }
  24.  
  25. }
  1. 关于另一中dom解析已经编写可以去我的博客中找找
  1. 具体代码可以下载链接http://download.csdn.net/download/zhangvalue/9204199

猜你在找的XML相关文章