`
java2liwei
  • 浏览: 14371 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java网络编程之SAX,Pull,DOM,对服务器下XML文件的解析之SAX篇

    博客分类:
  • java
 
阅读更多

这几天一直在研究java网络编程的一些问题,在一些论坛上看到这样一个知识点,就是对服务器端的xml文件的解析。刚开始的时候还是有点困惑的,后

来就慢慢的想通了,下面就让我具体的讲解一下吧。

既然讲到java的网络编程,就必须讲一下java中如何通过http协议获取服务端的信息。在所有的通过http协议向服务器发出请求获取资源的方有两种

POST和GET方式,具体两种方式的不同以及有关http协议此处不再解释。接下来我们详细讲解一下如何通过java的http编程获取服务器端的资源。

在java中我们可以找到这样一个类 URL,类 URL代表一个统一资源定位符,它是指向互联网“资源”的指针,资源可以是简单的文件或目录,也可以是

对更为复杂的对象的引用,具体的方法可以看URL的构造方法,在这里我们用最为简单的:

	String Path = "";	
  	URL url = new URL(Path ) ;

 Path是一个文档的具体地址,在下面就是一个XML文件的具体地址

这样我们就可以获取了一个URL对象,接下来我们可以通过URL中的openConnection() 方法获取一个到URl所引用的远程对象的链接,代码如下:

if(url!=null){
	HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
}

 

接下来我们要设置请求数据的方式以及请求的响应时间,代码如下:

httpURLConnection.setRequestMethod("GET");
httpURLConnection.setReadTimeout(3000);

 应为我们是要从服务器段获取数据,所以我们要获取输入流,这样就能读取服务端的数据,在这之前,我们要使用这个方法:

httpURLConnection.setDoInput(true);

 所有的准备工作做好了,现在我们要获取输入流了,在这个时候我们要先判断一下服务器端 返回的状态码,200表示正常,代码如下:

		if(httpURLConnection.getResponseCode()==200){
					
		inputStream = httpURLConnection.getInputStream();
		}

 

这样我们就可以从服务器端获取到了输入流了,接下来只要将输入流写到输出流就行了,此处不再赘述。下面让我们进入正题,对XML文档的解析。

先看这样的一个XML文件:

<Persons>
	<Person id=12>
		<name>田佳伟</name>
		<age>22</age>
	</Person>
	<Person id=13>
		<name>戴洪涛</name>
		<age>24</age>
	</Person>
</Persons>

 接下来我们就通过分别通过SAX ,Pull,DOM技术对它进行解析。
先说明一下这三中技术的差别,SAX技术不需要知道所要解析的文档标签,直接进行解析,而其他两种就需要知道文档标签才可以。先让我们看一下SAX

技术对XML文件的解析,

在java中有这样的一个类DefaultHandler,我们可以使用这个类对XML文档进行SAX技术的解析

在类DefaultHandler中有这样几个方法:

//接受文档是自动调用
startDocument() ;

// 接收元素开始的通知,自动调用
startElement(String uri, String localName, String qName, Attributes attributes) ;

//接收元素中字符数据的通知。
characters(char[] ch, int start, int length) ;
//接收元素结束的通知。
endElement(String uri, String localName, String qName); 

 


下面通过具体代码解释一下如何使用DefaultHandler类

首先我们要定义这样几个属性:

	//定义一个hashmap,用于装对应的键值和键名
	private HashMap<String , String > map = null;
	//定义一个装map的list
	private List<HashMap<String , String >>list = null;
	//定义当前的标签的名称
	private String CurrentTag;
	//定义当前的标签的内容
	private String CurrentValue;
	//定义节点的名称
	private String nodeName;

 


然后就要调用startDocument()方法了,在定义这个方法时我们要实例化list.代码如下:

	@Override
	public void startDocument() throws SAXException {
		//开始读取时创建list
		list = new ArrayList<HashMap<String,String>>();
		
	}

 
然后就是调用startElement(String uri, String localName, String qName, Attributes attributes) 方法,就相当于读到上面XML文件的

Person节点时,这个时候要先判断一下节点,然后实例化map,在判断其是否有值:如id,同时这个时候要给CurrentTag赋值了具体代码如下:

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		if(qName.equals(nodeName)){
			
			map = new HashMap<String, String>();
			
		}
		
		if(map!=null&&attributes!=null){
			
			for(int i=0;i<attributes.getLength();i++){
				
				map.put(attributes.getQName(i), attributes.getValue(i));
			}
		}
		CurrentTag = qName;
	}

 然后就要读到具体的内容了,调用这个方法characters(char[] ch, int start, int length) ;具体代码如下:

		@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if(CurrentTag!=null&&map!=null){
			CurrentValue = new String(ch,start,length);
			
		}
		if(CurrentValue!=null&&!CurrentValue.equals("")){
			map.put(CurrentTag, CurrentValue);
		}
		
		CurrentTag = null;
		CurrentValue = null;
	}

 
这个方法会读完所有的数据,这样就会读到尾节点了,于是就要调用这个方法了:
endElement(String uri, String localName, String qName);
那么,我们就应该把map添加到list中,同时初始化一下map,具体代码如下:

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if(qName.equals(nodeName)){
			list.add(map);
			map=null;
		}
	}

  在上面我们要通过构造函数传一个节点过去。

这样我们就将xml的文件解析了,然后就要用到saxparser对xml进行解析了,先从saxParser工厂中获取saxparser,然后再进行解析:

具体代码如下:

SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
SAXParser saxParser = saxParserFactory.newSAXParser();

 接下来调用这个方法进行解析

saxParser.parse(InputStream, DefaultHandle);

 

以上第一个参数是我们在之前讲过的获取的输入流,后面的参数是刚刚讲过的实例化的对象。
这样就可义解析服务器端的xml文件。

 

3
3
分享到:
评论

相关推荐

    使用sax,pull,dom4j解析XML

    在Java中,有三种主要的解析XML的方式:SAX(Simple API for XML)、Pull解析器和DOM4J。下面将详细介绍这三种方法以及它们在Eclipse 4.8和Java 1.8环境下的使用。 1. **SAX解析器** SAX是一种基于事件驱动的解析...

    Android SAX、DOM、Pull解析xml文件案例讲解

    本篇将详细讲解Android中三种主要的XML解析方式:SAX(Simple API for XML)、DOM(Document Object Model)和Pull解析器,并通过案例来帮助理解它们的工作原理和应用场景。 ### 1. SAX解析器 SAX(Simple API for...

    SAX,PULL,DOM解析XML

    XML(eXtensible Markup ...总的来说,SAX和PULL解析适用于处理大型XML文件,节省内存,而DOM解析则提供了一种更直观的方式处理XML,但需要更多内存。根据具体的应用场景和需求,开发者可以选择合适的XML解析方法。

    android中使用SAX和DOM以及Pull对xml文件进行解析

    - 数据量:大型XML文件适合SAX或Pull解析,小型文件则可以选择DOM。 - 性能:SAX和Pull解析器通常比DOM更快,因为它们不需加载整个文件到内存。 - 灵活性:DOM允许随机访问任何部分,而SAX和Pull是线性的,更适合按...

    Android sax pull dom 文件解析 示例

    XML解析主要有三种方式:SAX(Simple API for XML)、DOM(Document Object Model)和Pull解析器。下面将详细介绍这三种方法,并结合提供的"PullXmlDemo"文件,对Android中的XML解析进行深入探讨。 1. **SAX解析** ...

    Android ,SAX,DOM,PULL解析XML

    例如,可以创建一个XML文件(如21.XML),然后分别用SAX、DOM和PULL解析器进行解析,对比它们的实现方式和性能差异。在学习过程中,要注意处理XML的命名空间、属性、实体引用等问题,以及错误处理和异常捕获。 为了...

    android之利用SAX、DOM和Pull实现对schools.xml的解析

    本篇文章将探讨如何利用三种不同的解析方法——SAX(Simple API for XML)、DOM(Document Object Model)和Pull解析器来处理名为“schools.xml”的文件,并进行相关的单元测试。 首先,我们来看SAX解析器。SAX是一...

    Android 中利用SAX ,Dom,pull解析 XML 文件代码

    Android 中利用SAX ,Dom,pull解析 XML 文件代码 每种方式都介绍了代码,具体的文档在个人博客: http://blog.csdn.net/blueskydyliu/article/details/7055311 中介绍了。

    android xml 的解析 sax dom pull 解析

    在Android开发中,有三种主要的XML解析技术:SAX(Simple API for XML)、DOM(Document Object Model)和PULL(Pull Parser)。下面将详细介绍这三种解析方式及其在Android中的应用。 1. SAX解析: SAX(Simple ...

    android 三种方式解析XML(DOM,Pull,Sax) 带文件编码识别

    本篇文章将深入探讨三种在Android中解析XML的方法:DOM(文档对象模型)、Pull(拉取解析器)和SAX(简单API for XML),并且会特别强调如何识别文件编码。 首先,DOM解析是将整个XML文件加载到内存中形成一个树形...

    SAX或PULL或DOM解析XML

    通过这些文件,你可以深入学习XML解析的原理和实践,了解如何在实际项目中选择合适的解析方式,并掌握SAX、PULL和DOM解析器的使用。在实践中,你需要理解每种解析方式的优缺点,根据具体需求和资源限制来选择最合适...

    Android XML解析(DOM、PULL、SAX三种方式)

    Android系统提供了三种主要的XML解析方式:DOM(Document Object Model)、PULL(Pull Parser)和SAX(Simple API for XML)。每种方法都有其独特的特性和应用场景,下面将详细介绍这三种XML解析方式。 1. DOM解析...

    dom.sax.pull解析

    Java解析XML的三种方式 Ø Android中,解析Xml数据的三种方式: Ø 1、DOM(org.w3c.dom) Ø “文档对象模型”方式,解析完的Xml将生成一个树状结构的对象。 Ø 2、SAX(org.xml.sax) Ø SimpleAPI for XML,以事件的...

    Android中XML的解析Pull//SAX/DOM

    对于XML的处理,Android提供了三种主要的解析方式:Pull解析器、SAX(Simple API for XML)解析器以及DOM(Document Object Model)解析器。这三种方法各有优缺点,适用于不同的场景需求。 1. Pull解析器: ...

    通过SAX和PULL来解析XML,同时生成xml

    在Java编程中,解析XML有多种方法,其中SAX(Simple API for XML)和PULL(Pull Parser)是两种常用的事件驱动型解析方式。本文将深入探讨这两种解析技术,并介绍如何同时使用它们来生成XML文件。 **SAX解析器**: ...

    android解析XML总结(SAX、Pull、Dom三种方式)

    本文将深入探讨三种在Android中解析XML的主要方法:SAX(Simple API for XML)、Pull解析器和DOM(Document Object Model),并结合代码实现进行详细阐述。 **1. SAX解析** SAX(Simple API for XML)是一种事件...

    Android XML解析 SAX DOM Pull

    在Android中,有三种主要的XML解析方式:SAX(Simple API for XML)、DOM(Document Object Model)和Pull Parser。下面将详细介绍这三种解析方式,并结合person类的实例进行讲解。 1. SAX解析: SAX是一种事件驱动...

    java xml 4 种 解析xml 方法 sax jdom dom stAX

    为了处理XML文档,Java提供了多种解析方法,包括SAX(Simple API for XML)、JDOM(Java Document Object Model)、DOM(Document Object Model)以及stAX(Streaming API for XML)。下面将详细介绍这四种解析XML的...

    SAX,DOM,PULL解析示例

    在处理XML文档时,有三种主要的解析方式:SAX(Simple API for XML)、DOM(Document Object Model)和PULL(Pull Parsing Event Driven XML)。下面将详细阐述这三种解析方法以及如何读取和写入XML文件。 1. SAX...

    android使用pull 解析xml文件源码

    pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...

Global site tag (gtag.js) - Google Analytics