Java用SAX解析XML
2019独角兽企业重金招聘Python工程师标准>>>
Myhandler
package com.heli.xml.sax;/*** 用SAX解析XML的Handler*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;public class Myhandler extends DefaultHandler {// 存储正在解析的元素的数据private Map<String, String> map = null;// 存储所有解析的元素的数据private List<Map<String, String>> list = null;// 正在解析的元素的名字String currentTag = null;// 正在解析的元素的元素值String currentValue = null;// 开始解析的元素String nodeName = null;public Myhandler(String nodeName) {// TODO Auto-generated constructor stubthis.nodeName = nodeName;}public List<Map<String, String>> getList() {return list;}// 开始解析文档,即开始解析XML根元素时调用该方法@Overridepublic void startDocument() throws SAXException {// TODO Auto-generated method stub//System.out.println("--startDocument()--");// 初始化Maplist = new ArrayList<Map<String, String>>();}// 开始解析每个元素时都会调用该方法@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {// TODO Auto-generated method stub// 判断正在解析的元素是不是开始解析的元素//System.out.println("--startElement()--" + qName);if (qName.equals(nodeName)) {map = new HashMap<String, String>();}// 判断正在解析的元素是否有属性值,如果有则将其全部取出并保存到map对象中,如:<person id="00001"></person>if (attributes != null && map != null) {for (int i = 0; i < attributes.getLength(); i++) {map.put(attributes.getQName(i), attributes.getValue(i));}}currentTag = qName; // 正在解析的元素}// 解析到每个元素的内容时会调用此方法@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stub//System.out.println("--characters()--");if (currentTag != null && map != null) {currentValue = new String(ch, start, length);// 如果内容不为空和空格,也不是换行符则将该元素名和值和存入map中if (currentValue != null && !currentValue.trim().equals("") && !currentValue.trim().equals("\n")) {map.put(currentTag, currentValue);//System.out.println("-----" + currentTag + " " + currentValue);}// 当前的元素已解析过,将其置空用于下一个元素的解析currentTag = null;currentValue = null;}}// 每个元素结束的时候都会调用该方法@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stub//System.out.println("--endElement()--" + qName);// 判断是否为一个节点结束的元素标签if (qName.equals(nodeName)) {list.add(map);map = null;}}// 结束解析文档,即解析根元素结束标签时调用该方法@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stub//System.out.println("--endDocument()--");super.endDocument();}
}
SaxService
package com.heli.xml.sax;/*** 封装解析业务类*/
import java.util.List;
import java.util.Map;import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;public class SaxService {public static List<Map<String, String>> ReadXML(String uri, String NodeName) {try {// 创建一个解析XML的工厂对象SAXParserFactory parserFactory = SAXParserFactory.newInstance();// 创建一个解析XML的对象SAXParser parser = parserFactory.newSAXParser();// 创建一个解析助手类Myhandler myhandler = new Myhandler("uncall");parser.parse(uri, myhandler);return myhandler.getList();} catch (Exception e) {e.printStackTrace();} finally {}return null;}
}
XmlSaxTest
package com.heli.xml.sax;/*** 程序入口*/import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;public class XmlSaxTest {/*** @param args*/public static void main(String[] args) {ArrayList<Map<String, String>> list = (ArrayList<Map<String, String>>) SaxService.ReadXML("e:\\test.xml", "class");for (int i = 0; i < list.size(); i++) {HashMap<String, String> temp = (HashMap<String, String>) list.get(i);Iterator<String> iterator = temp.keySet().iterator();while (iterator.hasNext()) {String key = iterator.next().toString();String value = temp.get(key);System.out.println("key:"+key + "--value:" + value );}}System.out.println("--------------------------------------");System.out.println(list.toString());}}
test.xml
<?xml version="1.0" encoding="utf-8"?>
<uncall><result>1</result><OnClickCall><Response>success</Response><ActionID>123456</ActionID><Message>Originate successfully queued</Message></OnClickCall>
</uncall>
转载于:https://my.oschina.net/ydsakyclguozi/blog/493509
Java用SAX解析XML相关推荐
- Java 使用SAX解析XML文档
DOM,即Document Object Model,中文叫文档对象模型.DOM是W3C定义的标准文档对象模型,是一个与操作系统和编程语言无关的.用于内存存储和操作层次化文档的模型.当按 照DOM模型 ...
- java sax解析xml_【转】java使用sax解析xml文件
从下面这个url搬运.http://hck.iteye.com/blog/1175762 不过程序略有改动. 关于sax(搬自百科) SAX,全称Simple API for XML,既是指一种接口, ...
- SAX 解析XML文件:将XML转换成Java对象
本博客介绍的是解析本地XML文件,解析网络上的XML 本文写得比较简略,实际上项目应用更多的是解析网上的xml资源 使用SAX 处理XML需要一个Handler 对象,一般继承org.xml.sax, ...
- SAX解析XML文件
就目前来说,有三种方式可以解析XML文件:DOM.SAX.StAX.DOM将整个XML文件加载到内存中,并构建出节点树:应用程序可以通过遍历节点树的方式来解析XML文件中的各个节点.属性等信息:这种方 ...
- android xml解析demo,Android解析自定义xml文件--Sax解析xml文件,测试demo(方案二)...
转载请注明出处:http://blog.csdn.net/droyon/article/details/9346657 Sax解析xml 以下是测试Demo 运行程序类 public class Te ...
- python输出价目表-Python:使用基于事件驱动的SAX解析XML
SAX的特点: 是基于事件的 API 在一个比 DOM 低的级别上操作 为您提供比 DOM 更多的控制 几乎总是比 DOM 更有效率 但不幸的是,需要比 DOM 更多的工作 基于对象和基于事件的接口 ...
- SAX解析XML 详解
JAVA 解析 XML 通常有两种方式,DOM 和 SAX.DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一个 ...
- android 如何使用SAX解析XML
今天,简单讲讲android如何使用SAX解析XML . 昨天,我看代码时,看到了解析xml文档的代码,是使用SAX解析XML.但是我却不会使用SAX,于是在网上查找资料,最终解决了问题.这里记录一下 ...
- XML解析(一),SAX解析XML
转载自 XML解析(一),SAX解析XML 一.概述 SAX,全称Simple API for XML,是一种以事件驱动的XMl API,是XML解析的一种新的替代方法,解析XML常用的还有DOM ...
最新文章
- 青岛...沙尘暴!太可怕了~什么事儿都有!
- Alibaba 之 Nacos
- 马哥学习笔记——shell变量类型
- ajax点击更改div,jquery ajax双击div可直接修改div中的内容
- php bind_param,php – 在mysqli bind_param中绑定动态变量
- python3.7代码转python2.7_Python3.7与Python2.7在centos7下兼容并存
- CondLaneNet | 使用动态卷积核预测每个车道线实例
- 平板android优化网络,Android版Firefox更新 针对平板设备优化
- 为什么 jmeter 分布式测试,一定要设置 java.rmi.server.hostname
- 排毒食物 红糖可补血美体排毒
- sql server 数据库设计实例
- Java程序员必备核心知识点整理,建议收藏!
- mongodb数据库自动备份
- Try{}里有一个return语句,那么紧跟在这个try后面的finally{}里的code会不会执行,什么时候执行,在return之前还是之后?
- JavaScript字符串操作
- oracle中正则表达式规则,Oracle SQL 正则表达式
- android 不压缩保存图片格式,Android中图片的压缩方法
- linux 通过lvm合并磁盘
- 乘风广告联盟系统 v6.2
- 搭建VNC远程桌面服务