DOM方式:
1.创建DocumentBuilderFactory的对象dbf。
DocumentBuilderFactory dbf = DocumnetBuilderFactory.instance();
2.利用dbf创建DocumentBuilder对象
DocumentBuilder db = dbf.newDocumentBuilder();
3.用db的parse方法获取Document对象。
Document document = db.parse("*.xml");
4.利用Document对象进行节点解析。
SAX方式:
1.创建SAXParserFactory对象spf。
SAXParserFactory spf = SAXParserFactory.newInstance();
2.利用spf的newSAXParser()方法获取SAXParser()实例对象sp。
SAXParser sp = factory.newSAXParser();
3.创建一个继承于DefaultHandler类的类,并实例化其对象handler。
SAXHandler handler = new SAXHandler();
4.利用sp的parse(“….xml”,handler)方法解析XML文件。
sp.parse("*.xml",handler);
重写handler类对象的方法…
startDocument、endDocument、startElement、endElement、characters方法...
JDOM方式:
1.创建一个SAXBuilder对象
SAXBuilder sb =newSAXBuilder();
2.创建输入流,将xml文件加载到输入流中
Inputstream in=new FileInputstream("xxx.xml");
3.通过SAXBuilder的Build方法将输入流加载到saxb中获取dom对象
Document doc = sb.build(in);
4.通过document对象获取xml文件的根结点
Element rootElement =doc.getRootElement();
5.获取根结点下的子节点的List集合
List<Element> bookList = rootElement.getChildren();
DOM4J方式:
1、创建一个 SAXReader 对象saxReader
SAXReader saxReader = new SAXReader();
2、通过saxReader的read方法加载
*.xml文件,获取docuemnt对象
Document document = saxReader.read(fileName);
3、通过 getRootElement() 获取根节点
Element rootElement = document.getRootElement();
4、通过 elementIterator() 获取子节点的迭代器
Iterator it = rootElement .elementIterator();
四种方式对比:
基础方法:DOM(平台无关的官方解析方式)、SAX(基于事件驱动的解析方式)
扩展方法:JDOM、DOM4J(在基础的方法上扩展出的,只有在java中能够使用的解析方法)
DOM:一次性将整个xml文件加载到内存中,形成DOM树
优点:形成了树结构,直观好理解,代码更容易编写
解析过程中树结构保留在内存中,方便修改
缺点:当xml文件较大时,对内存消耗比较大,容易影响解析性能并造成内存溢出
SAX:逐条语句判断解析
优点:采用事件驱动模式,对内存消耗比较小
适用于只需要处理xml中数据时
缺点:不易编码
很难同时访问同一个xml中的多处不同数据
JDOM:仅使用具体类而不使用接口
API大量使用了Collections类
DOM4J:JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能
DOM4J使用接口和抽象基本类方法,是一个优秀的Java XML API
具有性能优异、灵活性好、功能强大和极端易使用的特点
是一个开放源代码的软件
性能测试结果:几kB的xml文件;建议使用DOM4J解析
DOM-33ms
SAX-6ms
JDOM-69ms
DOM4J-45ms