关闭

【J2EE】xml解析方式

标签: xml博客存储Java
303人阅读 评论(16) 收藏 举报

一、前言:之前的博客已经提到xml主要是用来存储、传输数据的,那么我们如何得到这些数据呢?也就是说怎么来解析xml呢?xml主要有两种解析方式。

二、解析方式原理:

    DOM解析:在程序开始执行的时候,先将整个xml文件加载到内存中,在内存中形成一棵Dom树,通过节点以及节点之间的关系来解析xml文件。

    SAX解析:允许读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才进行处理。采用事件处理方式解析xml文件。涉及两部分:解析器和事件处理器。

            

    解析器采用SAX方式在解析某个xml文档时,它只要解析到xml文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会吧当前解析到的xml文件内容作为方法的参数传递给事件处理器。                       

三、优缺点:

    1)DOM解析:

    ①优点:灵活,适合做曾删改操作,因为整个Dom树都在内存当中。

    ②缺点:一棵dom树会有很多对象,内存占用大。如果xml文件过大,很可能会导致内存溢出(可以调整JVM内存大小解决)

    2)SAX解析:

    ①优点:占用内存小,解析速度快。

    ②缺点:只适合读取文档,不适合对文档进行增删改操作。

四、解析开发包:

    我们并没有必要亲自编写解析程序,只需要调用解析开发包即可。常见的解析开发包有Jaxp、Jdom、dom4j。其中Jaxp是sun公司的官方解析方式。目前最常见得是dom4j。

五、实例:

    实例一:使用Jaxp进行sax解析:

                   

package cn.itcast.sax;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

public class Demo1 {
	/**
	 * 使用Jaxp进行 sax  解析xml文档
	 * @throws SAXException 
	 * @throws ParserConfigurationException 
	 * @throws IOException 
	 */
	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
		// TODO Auto-generated method stub
		
		//创建解析工厂
		SAXParserFactory factory = SAXParserFactory.newInstance();
		//得到解析器
		SAXParser sp = factory.newSAXParser();
		//得到读取器
		XMLReader reader = sp.getXMLReader();
		//设置内容处理器		
		reader.setContentHandler(new ListHandler());
		//读取xml文档内容
		reader.parse("src/book.xml");		
	}
}
//得到xml文档所有内容

class ListHandler implements ContentHandler{

	public void characters(char[] ch, int start, int length) throws SAXException {
		System.out.print(new String(ch,start,length));
	}
	
	public void endDocument() throws SAXException {		
	}

	public void endElement(String uri, String localName, String name)
			throws SAXException {
		 System.out.print("</"+ name +">");		
	}

	public void endPrefixMapping(String arg0) throws SAXException {		
		
	}
	public void ignorableWhitespace(char[] arg0, int arg1, int arg2)
			throws SAXException {		
	}
	public void processingInstruction(String arg0, String arg1)
			throws SAXException {		
	}
	public void setDocumentLocator(Locator arg0) {		
	}
	public void skippedEntity(String arg0) throws SAXException {		
	}
	public void startDocument() throws SAXException {		
	}
	public void startElement(String uri, String localName, String name,
			Attributes atts) throws SAXException {
		System.out.print("<" + name + ">");
		
		//如何迭代当前 这个对象 Attributes
		for(int i=0;atts!=null && i<atts.getLength();i++){   //null,抛空置异常 。巧用for循环
			String attName = atts.getQName(i);
			String attValue = atts.getValue(i);
			System.out.print(attName + "=" + attValue);			
		}		
	}
	public void startPrefixMapping(String arg0, String arg1)
			throws SAXException {
		
	}	
}

输出结果为:

             

这是将整个xml文档解析出来,当然也可以解析出xml文档的一部分。

实例二:使用dom4j基于sax方式读取xml

package cn.itcast.sax;

import java.io.File;

//使用dom4j方式进行解析
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Demo6 {
	public static void main(String[] args) throws DocumentException{
		//创建SAX解析器对象
		SAXReader reader = new SAXReader();
		//读取xml文件
		Document document =reader.read(new File("src/book.xml"));
		//获取根元素
		Element rootElement=document.getRootElement();
		System.out.println("根节点的名字:" + rootElement.getName());
	}
}

输出结果:


五、总结:

    xml的两种解析方式各有优缺点:当需要频繁对xml文件进行增删改操作时,我们选用dom方式进行解析。当仅仅需要读取xml文件时,我们选用sax方式解析。





0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

XML解析的两种方式:DOM方式和SAX方式

DOM:Document ObjectModel,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。 SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-D...
  • u012526194
  • u012526194
  • 2015-09-26 14:17
  • 3329

XML解析——Java中XML的四种解析方式

XML是一种通用的数据交换格式,它的平台无关性、语言无关性、系统无关性、给数据集成与交互带来了极大的方便。XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已。   XML的解析方式...
  • RickyIT
  • RickyIT
  • 2016-12-22 13:53
  • 8459

java解析xml的几种方式

【目录】 一、【基础知识——扫盲】 二、【DOM、SAX、JDOM、DOM4j简单使用介绍】 三、【性能测试】 四、【对比】 五、【小插曲XPath】 六、【补充】...
  • u012868901
  • u012868901
  • 2016-05-26 15:12
  • 2878

解析J2EE与XML组合技术(4)

让XML看得见     将XML同Web系统的用户界面进行集成显然是一种有益的尝试。绝大多数的界面程序,无论是基于还是不基于Web,都是将数据进行转换,然后用易读的格式展现给用户。用诸如XML这种...
  • zheng850
  • zheng850
  • 2013-01-20 09:36
  • 211

J2EE系列之MyBatis学习笔记(三)-- 使用XML配置SQL映射器

第一节博客是实例中数据库操作方法定义在了接口文件StudentMapper.java中,而这些操作的实现代码定义在了映射文件StudentMapper.xml中。这里把这个映射文件StudentMap...
  • feidie436
  • feidie436
  • 2017-06-13 15:39
  • 282

重拾J2EE(001-web.xml)

重拾J2EE(001-web.xml)工作以来一直在从事android的开发,J2EE基本上全部忘光了.今天开始重新学习.web.xml学名叫做部署描述符文件,是在Servlet规范中定义的,是j2e...
  • zgscwjm
  • zgscwjm
  • 2017-03-16 21:57
  • 67

J2EE for Spring在Idea里无法加载applicationContext.xml问题解决

本文并不能很好解决问题,请移步下文获得最终的解决方案:最终解决方案今天博主在学习spring,在此过程中可谓是问题一个接一个,最令人头疼的还是加载xml文件的问题,但是找了好多关于idea构建spri...
  • tydyz
  • tydyz
  • 2017-08-01 01:17
  • 889

J2EE中web.xml配置文件详解

一、web.xml是什么 web.xml学名叫部署描述符文件,是在Servlet规范中定义的,是Web应用的配置文件,是Web应用的基础。 二、web.xml加载流程 总的来说:ServletC...
  • zhangliangzi
  • zhangliangzi
  • 2016-02-11 15:37
  • 6978

j2ee容器【web.xml背后的事情】

web.xml背后的事情 很多时候框架或是标准帮我们做了很多事情,我们只是用。 看来会写servelet,知道spring或是mybatis就是远远不够的。 web.xml中会有...
  • yanxin007
  • yanxin007
  • 2016-08-11 11:16
  • 2470

XML和J2EE的完美结合

当前,Java 2平台企业版(J2EE)架构在厂商市场和开发者社区中倍受推崇。作为一种工具,可扩展标记语言(XML)简化了数据交换、进程间消息交换这一类的事情,因而对开发者逐渐变得有吸引力,并开始流行...
  • sandykwx
  • sandykwx
  • 2013-01-17 09:47
  • 66
    个人资料
    • 访问:108927次
    • 积分:9773
    • 等级:
    • 排名:第2094名
    • 原创:155篇
    • 转载:1篇
    • 译文:0篇
    • 评论:2974条
    博客专栏
    友情链接
    欢迎联系我
    最新评论