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相关推荐

  1. Java 使用SAX解析XML文档

    DOM,即Document Object Model,中文叫文档对象模型.DOM是W3C定义的标准文档对象模型,是一个与操作系统和编程语言无关的.用于内存存储和操作层次化文档的模型.当按 照DOM模型 ...

  2. java sax解析xml_【转】java使用sax解析xml文件

    从下面这个url搬运.http://hck.iteye.com/blog/1175762 不过程序略有改动. 关于sax(搬自百科) SAX,全称Simple API for XML,既是指一种接口, ...

  3. SAX 解析XML文件:将XML转换成Java对象

    本博客介绍的是解析本地XML文件,解析网络上的XML 本文写得比较简略,实际上项目应用更多的是解析网上的xml资源 使用SAX 处理XML需要一个Handler 对象,一般继承org.xml.sax, ...

  4. SAX解析XML文件

    就目前来说,有三种方式可以解析XML文件:DOM.SAX.StAX.DOM将整个XML文件加载到内存中,并构建出节点树:应用程序可以通过遍历节点树的方式来解析XML文件中的各个节点.属性等信息:这种方 ...

  5. android xml解析demo,Android解析自定义xml文件--Sax解析xml文件,测试demo(方案二)...

    转载请注明出处:http://blog.csdn.net/droyon/article/details/9346657 Sax解析xml 以下是测试Demo 运行程序类 public class Te ...

  6. python输出价目表-Python:使用基于事件驱动的SAX解析XML

    SAX的特点: 是基于事件的 API 在一个比 DOM 低的级别上操作 为您提供比 DOM 更多的控制 几乎总是比 DOM 更有效率 但不幸的是,需要比 DOM 更多的工作 基于对象和基于事件的接口 ...

  7. SAX解析XML 详解

    JAVA 解析 XML 通常有两种方式,DOM 和 SAX.DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一个 ...

  8. android 如何使用SAX解析XML

    今天,简单讲讲android如何使用SAX解析XML . 昨天,我看代码时,看到了解析xml文档的代码,是使用SAX解析XML.但是我却不会使用SAX,于是在网上查找资料,最终解决了问题.这里记录一下 ...

  9. XML解析(一),SAX解析XML

    转载自  XML解析(一),SAX解析XML 一.概述  SAX,全称Simple API for XML,是一种以事件驱动的XMl API,是XML解析的一种新的替代方法,解析XML常用的还有DOM ...

最新文章

  1. 青岛...沙尘暴!太可怕了~什么事儿都有!
  2. Alibaba 之 Nacos
  3. 马哥学习笔记——shell变量类型
  4. ajax点击更改div,jquery ajax双击div可直接修改div中的内容
  5. php bind_param,php – 在mysqli bind_param中绑定动态变量
  6. python3.7代码转python2.7_Python3.7与Python2.7在centos7下兼容并存
  7. CondLaneNet | 使用动态卷积核预测每个车道线实例
  8. 平板android优化网络,Android版Firefox更新 针对平板设备优化
  9. 为什么 jmeter 分布式测试,一定要设置 java.rmi.server.hostname
  10. 排毒食物 红糖可补血美体排毒
  11. sql server 数据库设计实例
  12. Java程序员必备核心知识点整理,建议收藏!
  13. mongodb数据库自动备份
  14. Try{}里有一个return语句,那么紧跟在这个try后面的finally{}里的code会不会执行,什么时候执行,在return之前还是之后?
  15. JavaScript字符串操作
  16. oracle中正则表达式规则,Oracle SQL 正则表达式
  17. android 不压缩保存图片格式,Android中图片的压缩方法
  18. linux 通过lvm合并磁盘
  19. 乘风广告联盟系统 v6.2
  20. 搭建VNC远程桌面服务

热门文章

  1. CUDA 编程实例:计算点云法线
  2. 将自己的类封装为lib的方法
  3. IOS调试移动端弹窗遮罩input框focus和click事件失效
  4. phpstorm一个窗口打开多个项目
  5. hive UDF函数
  6. HAProxy高并发问题解决
  7. 系统管理员在企业中的职业定位及发展方向 连载(一)
  8. 生成树(STP)学习笔记
  9. 抗炎饮食与混合坚果粉
  10. Flink中MapFunction以及其他各种xxxFunction在intellij中的用法和规律