四种方式解析XML:DOM      JDOM    DOM4J    SAX

先写一个XML栗子:

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="{book.xsd}">
<book id="1001">
<name>从入门到放弃</name>
<auto>高人</auto>
<price>35.5</price>
</book>
<book id="1002">
<name>从删库到跑路</name>
<auto>高小人</auto>
<price>48.3</price>
</book>
<book id="1003">
<name>从java到光头</name>
<auto>高大人</auto>
<price>16.6</price>
</book>
</books>

SAX解析XML的步骤:

1) 创建 SAXParserFactory 的对象

2) 创建 SAXParser 对象 (解析器)

3) 创建一个 DefaultHandler 的子类

4) 调用 parse 方法

BookDefaultHandler.java(创建一个 DefaultHandler 的子类)

package com.bjsxt.SAX;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; public class BookDefaultHandler extends DefaultHandler{
//重写第一个方法
/**
* 解析xml开始时调用
*/
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
System.out.println("解析xml开始-----");
} //重写第二个方法
/**
* 解析xml结束时调用
*/
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
System.out.println("解析xml结束-----"); } /**
* 解析xml开始时调用
*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
/*判断,如果是book结点,获取结点属性和属性值*/
if ("book".equals(qName)) {
//获取所有属性值
int length = attributes.getLength();
//循环获取每个属性
for (int i = 0; i <length; i++) {
String name = attributes.getQName(i);
String value = attributes.getValue(i);
System.out.println("获取属名称:"+name+"\t获取的属性值:"+value);
}
}else if (!"books".equals(qName)&&!"book".equals(qName)) {
System.out.print("结点名称:"+qName+"\t");
}
} /**
* 解析xml结束时调用
*/
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
// System.out.println("解析xml结束时调用.........");
} /**
* 解析xml开始时调用
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
String value=new String(ch, start, length);
if (!"".equals(value.trim())) {
System.out.println(value);
}
}
}

测试类:(TestSAX.java

package com.bjsxt.SAX;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import org.xml.sax.SAXException; public class TestSAX {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
// 1) 创建 SAXParserFactory 的对象
SAXParserFactory saxpf=SAXParserFactory.newInstance();
// 2) 创建 SAXParser 对象 (解析器)
SAXParser parser=saxpf.newSAXParser();
// 3) 创建一个 DefaultHandler 的子类
BookDefaultHandler bdh=new BookDefaultHandler();
// 4) 调用 parse 方法
parser.parse("book.xml", bdh);
}
}

运行结果:

Java修炼——四种方式解析XML_SAX的更多相关文章

  1. Java修炼——四种方式解析XML_JDOM

    四种方式解析XML:DOM     JDOM    DOM4J    SAX JDOM使用前需要上传jar包. 先写一个XML栗子: <?xml version="1.0" ...

  2. Java修炼——四种方式解析XML_DOM

    四种方式解析XML:DOM      JDOM   DOM4J    SAX 先写一个XML栗子: <?xml version="1.0" encoding="UT ...

  3. Java修炼——四种方式解析XML_DOM4J

    四种方式解析XML:DOM     JDOM    DOM4J    SAX 注意: DOM4J使用是需要上传jar包的. 先写一个XML栗子: <?xml version="1.0& ...

  4. java 多线程实现四种方式解析Thread,Runnable,Callable,ServiceExcutor,Synchronized ,ReentrantLock

    1.Thread实现: import java.util.Date; import java.text.SimpleDateFormat; public class MyThread extends ...

  5. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

  6. JAVA中的四种JSON解析方式详解

    JAVA中的四种JSON解析方式详解 我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式. 1.JSON官方 脱离框架使用 2.GSON 3.FastJSON ...

  7. 解析xml文件的四种方式

    什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没 ...

  8. 【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】

    不考虑第三方框架,如果只使用JDK提供的API,那么可以使用三种方式调用WebService服务:另外还可以使用Ajax调用WebService服务. 预备工作:开启WebService服务,使用jd ...

  9. Java实现文件复制的四种方式

    背景:有很多的Java初学者对于文件复制的操作总是搞不懂,下面我将用4中方式实现指定文件的复制. 实现方式一:使用FileInputStream/FileOutputStream字节流进行文件的复制操 ...

随机推荐

  1. 2019年10月13日 linux习题 wangqingchao

    1. GUN的含义是: GNU's Not UNIX . 2. Linux一般有3个主要部分:内核.命令解释层.实用工具. 3.POSIX是可携式操作系统接口的缩写,重点在规范核心与应用程序之间的接口 ...

  2. 提交代码到github托管

    廖雪峰官网:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000,感觉初学很棒的一个地 ...

  3. HTML的footer置于页面最底部

    vue项目中,使用element-ui的布局,仍然出现footer不固定页面底部的情况,网上找到的一个管用的 方法是:footer高度固定+绝对定位 <html> <head> ...

  4. vue中router跳转本页刷新

    问题:  导航栏的地址发生改变但是页面却不刷新  (用vue-router路由到当前页面,页面是不进行刷新的)解决: 1.);           2.location.reload()       ...

  5. [书籍]值得纪念的第100篇博客,推荐一些看过的UI书籍

    1. 前言 来到博客园11年,这两年闲下来了才有时间写写博客,不知不觉终于写到第100篇博客了.回顾过去发表的博客,居然大部分都与UI相关.明明我本来从事的是Oracle的相关开发,明明我当初的目标是 ...

  6. poj 2991 起重机

    地址 http://poj.org/problem?id=2991 题解 本来以为这是一个简单的线段树模板 不料始终不太明白线段树如何记录转动角度后的各个线段端的XY值 学习了网络上的一些博客题解 感 ...

  7. PowerMock学习(十)之Mock spy的使用

    前言 回顾下之前学过的内容,会发现一点,如果在mock后不写when和thenReturn去指定,即便是mock调用任何方法,什么也不会做,也看不到什么效果. 划重点的时候来了,本身mock出来的对象 ...

  8. 【Android - 控件】之可悬浮列表StickyHeadersRecyclerView

    这是timehop的GitHub上发表的一个控件框架,大家可以去参考它的[GitHub]. 这里先贴出GitHub上提供的效果图: 要使用这个框架,我们需要首先导入它的依赖: compile 'com ...

  9. go变量

    go基础 go变量(静态) package main import "fmt" func main() { //申明变量 var zx int //变量赋值 zx=10 //输出变 ...

  10. 教程 Redis+ flask+vue 在线聊天

    知识点 基于 Server-Sent Event 工作方式,Web 即时通信 Redis 包 发布订阅功能的使用 flask 快速入门,常用对象实例方法函数 Vuejs 列表页面自动渲染 效果图 代码 ...