`
落日的余晖
  • 浏览: 9478 次
  • 性别: Icon_minigender_1
  • 来自: 绵阳
最近访客 更多访客>>
社区版块
存档分类
最新评论

java解析xml数据---sax解析器

阅读更多
下面是handler解析数据的方法
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class MyHandler extends DefaultHandler {

	private HashMap<String, String> map = null;// 存储单个解析的完整对象
	private List<HashMap<String, String>> list = null;// 存储全部的解析对象
	private String currentTag = null; // 正在解析的元素的标签
	private String currentValue = null;// 正在解析的元素的值
	private String nodeName = null;// 解析节点的名称

	public MyHandler(String nodeName) {
		this.nodeName = nodeName;
	}

	public List<HashMap<String, String>> getList() {
		return list;
	}

	public void startDocument() throws SAXException {
		// 当读到第一个开始标签的时候,开始触发
		list = new ArrayList<HashMap<String, String>>();
	}

	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		// 当遇到文档的开头的时候,调用这个方法
		if (qName.equals(nodeName)) {
			map = new HashMap<String, String>();
		}
		if (attributes != null && map != null) {
			for (int i = 0; i < attributes.getLength(); i++)
				map.put(attributes.getQName(i), attributes.getValue(i));
		}
		currentTag = qName;
	}

	public void characters(char[] ch, int start, int length)
			throws SAXException {
		// 处理从xml文件所读取到的内容
		if (currentTag != null && map != null) {
			currentValue = new String(ch, start, length);
			if (currentValue != null && !currentValue.trim().equals("")
					&& !currentValue.trim().equals("\n")) {
				map.put(currentTag, currentValue);
			}
		}
		currentTag = null;
		currentValue = null;
	}

	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		// 遇到结束标记的时候,调用此方法
		if (qName.equals(nodeName)) {
			list.add(map);
			map = null;
		}
	}

}

下面是读取输入流中xml数据,并将这些数据一List方式返回
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import com.sax.handler.MyHandler;

public class SaxService {

	public static List<HashMap<String, String>> readXML(InputStream input, String nodeName){
		
		try {
			//创建一个解析xml的工厂对象
			SAXParserFactory apf = SAXParserFactory.newInstance();
			SAXParser parser = apf.newSAXParser();//解析xml内容  
			MyHandler handler = new MyHandler(nodeName);
			parser.parse(input, handler);//用给定的handler解析input输入流中的内容
			input.close();
			return handler.getList();
			
		} catch (Exception e) {
			System.out.println(e);
		}
		return null;
	}
}

下面是从服务器中得到xml文件,并将其转化为数据流
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUtils {

	public static InputStream getXML(String path) {

		InputStream input = null;

		try {
			URL url = new URL(path);
			if (url != null) {
				HttpURLConnection connection = (HttpURLConnection) url
						.openConnection();
				connection.setReadTimeout(3000);
				connection.setDoInput(true);
				connection.setRequestMethod("GET");
				int code = connection.getResponseCode();
				if (code == 200) {
					input = connection.getInputStream();
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
		}

		return input;
	}
}


下面就是测试代码了
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;

import com.sax.http.HttpUtils;
import com.sax.service.SaxService;

public class Test {

	public static void main(String[] args) {
		String path = "http://127.0.0.1:8080/myhttp/person.xml";
		try {
			InputStream input = HttpUtils.getXML(path);
			List<HashMap<String, String>> list = SaxService.readXML(input,
					"person");
			
			for(HashMap<String, String> map :list){
				System.out.println("-test->"+map.toString());
			}

		} catch (Exception e) {
			System.out.println(e);
		}
	}

}
1
1
分享到:
评论

相关推荐

    jsp操作xml源码,解析器为DOM和SAX

    利用JSP直接读写XML文件,分别用DOM解析器和SAX解析器加以实现,非常适合初学者入门,作为一个了解jsp与XML的台阶

    java解析xml及4种常用解析比较

    SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员...

    android 解析XML文件 生成XML文件

    支持SAX解析XML文件,DOM解析XML文件,Pull解析器解析XML文件,Pull生成XML文件,JAVA和Kotlin两种语言编写

    webservice远程调用,返回数据生成xml文件,并通过SAX解析出来

    webservice远程调用,返回String数据并生成xml文件到本地工程,在通过SAX解析器把数据解析出来。这是webservice应用的一个简单的例子。根据该例子的思想,可以实现很多功能了。例如把client工程的sayHello方法改为...

    xml的JAVA解析与格式定义

    解析器的介绍 文档对象模型(DOM)解析实例 SAX解析实例 DOM4J解析实例 JDOM解析实例 JAVA操纵XML 实例讲解

    sax:用于XML和HTML的sax-js sax样式解析器的维护分支

    HTML解析器-这是一个很好的目标,但事实并非如此。 这只是XML。 DOM构建器-您可以使用它来构建XML之外的对象模型,但是并不能做到这一点。 XSLT-没有DOM =没有查询。 100%兼容(某些其他SAX实施)-大多数SAX实施...

    VTD-XML 不同于SAX和DOM的XML高效解析器

    不同于SAX和DOM的XML高效解析器,内存占用少,速度快,支持XPATH;用多种语言实现,C,JAVA等

    XML高效解析器对比测试(Java工程)

    本Java项目对SAX,XPP,VTD三种高效的XML解析技术进行了对比测试。如果你只想知道结果: 连续10,000XML解析(简单XML): SAX:16157 XPP:3875 VTD:2218 请将本项目解压后导入Eclipse,并使用Junit4运行。本资源也可作为SAX...

    java解析xml

    // 解析XML文档的输入流,得到一个Document Document doc = dombuilder.parse(is); // 得到XML文档的根节点 Element root = doc.getDocumentElement(); // 得到节点的子节点 NodeList books = root....

    PULL解析xml的demo

    XML解析有三种方式 1,DOM 通用性强,它会将XML文件的所有内容读取到内存中,然后使用DOM API遍历XML树、检索所需的数据;...Android自带的XML解析器,和SAX基本类似,也是事件驱动,不同的是PULL事件返回的是数值型

    SAX解析XML

    xml文件被Sax解析器载入,由于Sax解析是按照xml文件的顺序来解析,当读入&lt;?xml.....&gt;时,会调用startDocument()方法,当读入的时候,由于它是个ElementNode,所以会调用startElement(String uri, String local...

    java解析xml之sax解析xml示例分享

    SAX基于事件的解析,解析器在一次读取XML文件中根据读取的数据产生相应的事件,由应用程序实现相应的事件处理逻辑,即它是一种“推”的解析方式;这种解析方法速度快、占用内存少,但是它需要应用程序自己处理解析器...

    经典的DOM解析XML范例

    用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object Module)称为DOM。Sun公司提供了Java API for XML Parsing(JAXP)...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    3.3.3 sax解析器工厂 70 3.3.4 sax的异常类 71 3.3.5 errorhandler接口 73 3.3.6 使用sax解析xml文档实例 74 3.4 jdom 83 3.4.1 下载并配置jdom 83 3.4.2 jdom api介绍 84 3.5 dom4j 88 3.5.1 下载并配置dom...

    Gei基于Java的XML解析器实现.pdf

    用java解析XML文档,最常用的有两种方法:使用基于事件SAX和基于树和节点的文档对象模型DOM。该文给出一种基于java的采用DOM的XML解析器的实现方法,详细给出了该方法的设计方案和所用到的关键类和算法。

    Java中四种XML解析技术

     SAX 解析器采用了基于事件的模型,它在解析 XML 文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX 对内存的要求通常会比较低,因为它让开发...

    XML数据提取并导入数据库

    须要有SAX、DOM解析器的类文件,JDOM只是一种适合Java程序员来使用的Java XML解析器,目前流行的Java XML解析器还有:Apache Xerces Java、JAXP。 Xerces Java解析器是完全用Java编写的XML解析器,最新版本是2.5,...

    Android三种解析XML方式demo

    在Android平台上可以使用Simple?API?for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件

    Android_XML_Demo:Android解析XML格式数据的三种方法

    Android解析XML格式数据的三种方法 XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的...

Global site tag (gtag.js) - Google Analytics