要解析的XML文件:myClass.xml

<?xml version="1.0" encoding="utf-8"?>
<class>
<stu id="001">
<name>Allen</name>
<sex>男</sex>
<age>20</age>
</stu>
<stu id="002">
<name>namy</name>
<sex>女</sex>
<age>18</age>
</stu>
<stu id="003">
<name>lufy</name>
<sex>男</sex>
<age>18</age>
</stu>
</class>

用SAX解析XML的Handler类:Myhandler.java

/**
* 用SAX解析XML的Handler
*/
package com.xml.util; 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 stub
this.nodeName=nodeName;
} public List<Map<String, String>> getList() {
return list;
} //开始解析文档,即开始解析XML根元素时调用该方法
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
System.out.println("--startDocument()--");
//初始化Map
list=new ArrayList<Map<String,String>>();
} //开始解析每个元素时都会调用该方法
@Override
public 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; //正在解析的元素
} //解析到每个元素的内容时会调用此方法
@Override
public 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;
}
} //每个元素结束的时候都会调用该方法
@Override
public 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;
}
} //结束解析文档,即解析根元素结束标签时调用该方法
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
System.out.println("--endDocument()--");
super.endDocument();
}
}

最新文章

  1. 分布式服务协调员zookeeper - 应用场景和监控
  2. (转)Intent flag 与启动模式的对应关系
  3. Java日期处理
  4. 如何解决结果由block返回情况下的同步问题(转)
  5. Hdu 1004
  6. python leetcode 日记 --Contains Duplicate --217
  7. linux下查看当前用户的 三个命令
  8. 图形显示之RGB
  9. 坑爹的SQL ISNUMERIC
  10. Docker 端口映射问题解决
  11. TCP/IP详解学习笔记(13)-- TCP连接的建立与终止
  12. 通过shell脚本实现代码自动化部署
  13. C++ Primer 5th 第12章 动态内存
  14. seajs 学习笔记
  15. 入门vue----(vue的安装)
  16. 小程序通过 url 向内嵌 H5 传参注意事项
  17. 初步学习大数据——设置虚拟机固定ip地址
  18. C语言-第一周作业
  19. linux下新建(touch)\复制(cp)\剪切(mv)\删除(rm)文件
  20. urllib 基础模块

热门文章

  1. 【JAVA】java中Future、FutureTask的使用
  2. debian repository的成长过程
  3. mysql05---游标
  4. Dancing Links 专题总结
  5. Basic Queries (LINQ to XML)
  6. Can&#39;t remove netstandard folder from output path (.net standard)
  7. P4844 LJJ爱数数 数论
  8. Go语言web框架 gin
  9. c#自动登录
  10. Git 仓库结构 (一)***