java 之 XML SAX解析

原创 2018年04月15日 20:02:34

    时隔多日,终于,继XML DOM解析之后,开始XML SAX 解析之旅,首先说一下DOM解析,DOM解析:用于解析那种较小的XML文件,它要读取整个XML。我们来做个通俗一点的比喻,讲XML文件比喻成一个人体,DOM解析,就是读取整个人体的信息,由外至内,解析最外层,再依次解析到器官,细胞等等,这是有整体到局部到细节的解析方式;而SAX解析,则是依次,从人体的头部到脚部,每一层都解析到细胞结构。

    那么,SAX解析如何实现呢?主要分一下几步:

    1、创建SaxParserFactory实例
    2、通过SAXParserFactory创建SAXParser实例
    3、创建一个Handler类继承自DefaultHandler处理业务
    4、创建一个Handler对象

    5、用SAXParser.parser()方法,传入xml文件路径和handler对象进行解析

    这种解析方式主要逻辑是在Handler类中进行实现的,这个类里面的逻辑操作,复写其中的几个方法,则是SAX的核心,代码如下:

    Main主类:

   public class Main{

public static void main(String[] args) {

                //创建SAXParserFactory 工厂实例

SAXParserFactory factory = SAXParserFactory.newInstance();

try {

                        //通过工厂实例创建SAXParser 解析器

SAXParser parser = factory.newSAXParser();

                        //创建自定义的Handler实例

SAXHandler saxHandler = new SAXHandler();

                        //传入参数进行解析

parser.parse("info.xml", saxHandler);
} catch (ParserConfigurationException | SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}



    SAXHnadler类集成自DefaultHandler

public class SAXHandler extends DefaultHandler{
String name;                //标签名称,
String currentTag;        //记录当前标签名
//开始解析文件
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
}
//解析文件结束
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
}
//开始解析xml元素
@Override
public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {
// TODO Auto-generated method stub
super.startElement(arg0, arg1, arg2, arg3);

//name为标签名称
if ("searchName".equals(name)) {
//如果已知标签的属性,则可以直接调用Attributes.getValue(String name)获取属性值  
            System.out.println("已知book已有id属性,获取属性值-->" + arg3.getValue("id"));  
            //如果不知道标签的属性,则需要遍历Attributes分别获取属性名与属性值  
            for(int i = 0; i < arg3.getLength(); i++) {
            //通过Attributes.getQName(int index)获取属性名称
            System.out.print("属性名-->" + arg3.getQName(i));
            //通过Attributes.getValue(int index)获取属性值
            System.out.println("属性值-->" + arg3.getValue(i));
            }
}
currentTag = name;
}
//解析xml元素结束
@Override
public void endElement(String arg0, String arg1, String arg2) throws SAXException {
// TODO Auto-generated method stub
super.endElement(arg0, arg1, arg2);
if (name.equals("searchName")) {
System.out.println("一个大标签解析完成");
}
currentTag = null;
}
//解析文档内容时调用
@Override
public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
// TODO Auto-generated method stub
super.characters(arg0, arg1, arg2);
String str = new String(arg0, arg1, arg2);  
                if (currentTag.equals("节点名")) {
//进行操作
}
}
}

    本次讲解到此结束,希望大家一起学习,共同进步,感兴趣的友友们可关注我的博客,后期会经常更新更多博客经验




Java解析xml——SAX解析

一、Dom解析 VS SAX解析 Dom解析是将整个xml文件加载到内存中,然后再进行相关的操作。 SAX解析是依次读取xml文件的内容,逐个解析。 二、SAX解析实例 books.xml: ...
  • u011024652
  • u011024652
  • 2016-05-27 13:58:33
  • 672

Java解析xml文档之SAX解析

sax解析是一种边读边解析,仅向前读取,不能修改,用来读。sax创建XMLReader三步:SAXParserFactory factory = SAXParserFactory.newInstanc...
  • new___Smile
  • new___Smile
  • 2016-07-16 00:59:35
  • 6075

JAVA-使用SAX解析XML数据

一、SAX (Simple API for XML) SAX解析XML文件采用的是事件驱动,它不需要解析完整个文档,而是一边按内容顺序解析文档,一般判断当前读到的字符是否符合XML语法中的某部分,如果...
  • cxmscb
  • cxmscb
  • 2016-07-22 14:51:56
  • 692

使用SAX解析将xml的文件内容结构保存到java对象中

在Java使用Sax解析xml文件中,我们介绍了如何用SAX解析xml文件,接下来我们继续学习如何将一个xml文件的内容结构保存到一个java实例对象中 一、xml文件如下 计...
  • kingsonyoung
  • kingsonyoung
  • 2016-07-22 15:17:52
  • 1635

XML解析(一),SAX解析XML

一、概述 SAX,全称Simple API for XML,是一种以事件驱动的XMl API,是XML解析的一种新的替代方法,解析XML常用的还有DOC解析,PULL解析(Android特有),SAX...
  • ydxlt
  • ydxlt
  • 2015-12-05 09:38:59
  • 18440

sax解析实现xml增删改

需求:      在jsp页面上展示树形结构,当选中某个节点时,可以新增该节点的子节点、删除该节点、修改该节点信息。      操作节点的时候,既操作数据库,也操作xml文件。先操作数据库,后操作...
  • a639735331
  • a639735331
  • 2017-06-14 11:12:47
  • 741

Java&Xml教程(五)使用SAX方式解析XML文件

Java SAX解析机制为我们提供了一系列的API来处理XML文件,SAX解析和DOM解析方式不太一样,它并不是將XML文件内容一次性全部加载,而是连续的部分加载。javax.xml.parsers....
  • Rongbo_J
  • Rongbo_J
  • 2015-12-13 15:09:12
  • 1677

SAX 解析XML 将xml转换成javaBean

SAX没有提供,直接将xml转成自定义javaBean的方法。 自己写了一个工具类通过反射机制转换。可以支持多数组。...
  • tiantiandjava
  • tiantiandjava
  • 2016-07-26 10:26:39
  • 912

java学习脚印:SAX解析xml时命名空间以及参数问题(敏捷版)

java学习脚印:SAX解析xml时命名空间以及localName等参数问题 本文以实例形式解释下java利用SAX解析xml时命名空间及其参数问题。 关于为什么要使用,以及怎么使用命名空间的问题,...
  • ziyuanxiazai123
  • ziyuanxiazai123
  • 2013-11-09 11:13:41
  • 2596

SAX解析XML文档的时候在characters方法中解析有的时候xml文档格式凌乱的时候拿不到数据

首先我们先将xml何为格式好何为格式不好讲清楚 先上格式好的图 在一个就是格式不好的图 我们可以看出来,格式好的与格式不好的之间的差别在于, 不好的多了很多 \n \t 这样的换...
  • u013803262
  • u013803262
  • 2016-07-02 23:02:26
  • 1849
收藏助手
不良信息举报
您举报文章:java 之 XML SAX解析
举报原因:
原因补充:

(最多只允许输入30个字)