java--SAX解析xml

【Java编程】SAX XML Parser解析、生成XML文件 1、优缺点 优点: SAX 从根本上解决了 DOM 在解析 XML 文档时产生的占用大量资源的问题。其实现是通过类似于流解析的技术,通读整个 XML 文档树,通过事件处理器来响应程序员对于 XML 数据解析的需求。由于其不需要将整个 XML 文档读入内存当中,它对系统资源的节省是十分显而易见的,它在一些需要处理大型 XML 文档以及性能要求较高的场合有起了十分重要的作用。支持 XPath 查询 阅读详情

有下面的xml文件,如何解析

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book id="1">
        <name>王小二的妖孽人生</name>
        <author>乔治马丁</author>
        <year>2014</year>
        <price>89</price>
    </book>
    <book id="2">

        <name>安徒生童话</name><year>2004</year>
        <price>77</price>
        <language>English</language>
    </book>
</bookstore>

首先创建sax相关类

package saxXML;

import java.io.IOException;
import java.util.ArrayList;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

import sax3.Book;
import saxXML2.SaxHandler;

public class SaxTest {

    public static void main(String[] args) {

        SAXParserFactory factory = SAXParserFactory.newInstance();
        try {
            SAXParser parser = factory.newSAXParser();

            SaxHandler handler = new SaxHandler();

            parser.parse("booKs.xml", handler);

            ArrayList<Book> arrayList=handler.getArrayList();
            System.out.println("数组的大小"+arrayList.size());
            for (Book book : arrayList) {
                System.out.println("图书序列"+book.getId());
                System.out.println("["+book.getName()+"]");
                System.out.println("作者"+book.getAuthor());
                System.out.println("价格"+book.getPrice());
                System.out.println("年份"+book.getYear());
            }







        } catch (ParserConfigurationException | SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

实现DefaultHandler 类

package saxXML2;

import java.util.ArrayList;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import sax3.Book;

public class SaxHandler extends DefaultHandler {
      String valueString="";
      Book book=null;
      ArrayList<Book> bookList=new ArrayList<Book>();
      public ArrayList<Book> getArrayList() {
        return bookList;
    }

@Override
public void startDocument() throws SAXException {
    // TODO Auto-generated method stub
    super.startDocument();
    System.out.println("startDocument");
}
@Override
    public void endDocument() throws SAXException {
        // TODO Auto-generated method stub
        super.endDocument( );
        System.out.println("endDocument");
    }
    @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);
            if (qName.equals("book")) {//对于book节点
                book=new Book();
              for (int i = 0; i < attributes.getLength(); i++) {
                System.out.print(attributes.getQName(i)+ "   ");
                System.out.println(attributes.getValue(i));
                if (attributes.getQName(i).equals("id")) {
                    book.setId(attributes.getValue(i));//这里属性值就是id
                }
            }
            }                           //对于其他节点,滤掉--
            if (!qName.equals("book")&&!qName.equals("bookstore")) {
                System.out.print("(qName)"+qName);
            }
        }
    @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException {
            // TODO Auto-generated method stub
            super.endElement(uri, localName, qName);
            //找那两本书的book的结束标记
            if (qName.equals("book")) {

                System.out.println();
                System.out.print("=====遍历一本书结束");
                bookList.add(book);
                book=null;
            }
            else if (qName.equals("name")) {
               book.setName(valueString);
            }
            else if(qName.equals("price")) {
                book.setPrice(valueString);
            }
            else if (qName.equals("author")) {
                book.setAuthor(valueString);
            }
            else if (qName.equals("lanuage")) {
                 book.setAuthor(valueString);
            }
            else if (qName.equals("year")) {
                book.setYear(valueString);
            }       
        }
   @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        // TODO Auto-generated method stub
        super.characters(ch, start, length);
       valueString=new String(ch,start,length) ;
       if (!valueString.trim().equals("")) {
        System.out.println("(charactors)"+valueString);
      }  
   }
}

书籍类用于存放xml里面对象

package sax3;



public class Book {
 private String id;
 private String name;
 private String author;
 private String year;
 private String price;
 private String lanuage;
public String getId() {
    return id;
}
public void setId(String string) {
    this.id = string;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getAuthor() {
    return author;
}
public void setAuthor(String author) {
    this.author = author;
}
public String getYear() {
    return year;
}
public void setYear(String year) {
    this.year = year;
}
public String getPrice() {
    return price;
}
public void setPrice(String price) {
    this.price = price;
}
public String getLanuage() {
    return lanuage;
}
public void setLanuage(String lanuage) {
    this.lanuage = lanuage;
}


}
Java使用SAX解析XML实战 目前解析XML的方式有很多,常用的有Dom,jdom,dom4j,SAX等方式解析xml文件。各种方法应用场景不太一致。下面简单介绍一下Dom和SAX解析Xml文件的应用场景。1、使用Dom解析Xml,每次需要把xml文件整个加载到内存中,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。应用场景如下:a:xml文件或者xml流内容较少,b:机器处理能力较强(硬盘,内... 阅读详情

相关推荐

STM32F103移植NuttX实战:从零搭建最小系统到串口Shell(附完整配置文件)

本文详细介绍了在STM32F103C8T6开发板上移植NuttX实时操作系统的完整过程,包括环境搭建、BSP配置、系统时钟初始化、驱动裁剪、编译烧录及串口Shell交互。通过实战指南帮助开发者快速掌握NuttX移植技巧,解决典型问题,适用于嵌入式系统开发。

tree8的博客 293

java sax解析xml_Java Sax解析xml

1. Java Sax解析是按照xml文件的顺序一步一步的来解析,在解析xml文件之前,我们要先了解xml文件的节点的种类,一种是ElementNode,一种是TextNode。如下面的这段book.xmlthinking in java85.5Spring in Action39.0其中,像、这种节点就属于ElementNode,而thinking in java、85.5这种就属于Text...

weixin_28785681的博客 270

AI 代码生成工具的质量评估体系

基础需求层包括响应速度(Response Time)和界面友好性(UI Friendliness),期望需求层涵盖智能提示(Smart Suggestions)和个性化配置(Personalization),兴奋需求层则涉及多模态交互(Multimodal Interaction)和代码进化(Code Evolution)。在金融领域,代码审计合规性(Compliance Audit)权重应提升至40%,而在Web开发中,API兼容性(API Compatibility)的权重需达到35%。

2503_92418637的博客 3372

Java SAX生成和解析XML

SAX解析 场景:从上往下线性读取xml时 解析比较大的xml文档时 优点:读取速度快,内存消耗小 缺点:只能知道当前节点的信息,如需知道其它信息,需要自己编码实现 SAX解析步骤 第一步:创建sax转换工厂 SAXTransformerFactory factory = (SAXTransformerFactory)SAXTransf...

p812438109的专栏 1万+

用Cadence IC618仿真双平衡吉尔伯特混频器:从原理图到后仿的完整避坑指南

本文详细介绍了在Cadence IC618环境中设计双平衡吉尔伯特混频器的全流程,包括原理图设计、仿真优化和版图实现。通过实战案例分享,重点解析了设计中的关键技巧和常见问题解决方案,帮助工程师高效完成高性能混频器设计,特别适合射频前端开发人员参考。

weixin_42656416的博客 162

通信原理与MATLAB(八):2PSK的调制解调

通信原理和MATLAB

菜yuan~的博客 3万+

Java使用SAX解析xml文件详解

xml文件 xml文件是一种可扩展语言,专门用来存储和传输数据,它与html文件类,但是不用于显示文件内容,只是用来存储和传输文件。它的格式非常简单。大家可以自行百度 SAX方法解析xml文件 SAX方法是一种流解析的方法,它是以顺序的方式从头至尾的解析xml文件,过一遍之后就结束了,所以应该注意在解析的过程中不断的存储数据。 我们要解析的xml文件内容为: <?xml version="1...

结庐境的博客 3262

卫星通信链路预算实战:从EIRP到Eb/N0的完整计算指南(含Excel模板)

本文提供了一份卫星通信链路预算的实战指南,详细解析了从EIRP到Eb/N0的完整计算流程。文章重点对比了C波段与Ku波段在应对降雨衰减等动态因素时的不同策略,并分享了包含核心公式的Excel模板,帮助工程师将理论转化为可执行的系统设计依据。

weixin_29230773的博客 534

java解析sax_Java基础之SAX解析XML

1. Java解析XML简介Java库中提供了两种XML解析器:像文档对象模型(Document Object Model,DOM)解析器这的树型解析器(tree parse),它们将读入的XML文档转换成树结构。像XML简单API(Simple API for XML,SAX)解析器这样的流机制解析器(streaming parser),它们在读入XML文档时生成相应的事件。2. SAX简介SA...

weixin_35275162的博客 616

Unity2D像素刀光实现:粒子方向控制与像素级渲染规范

像素风游戏中的刀光特效并非普通粒子动画,而是需严格遵循像素艺术原理的视觉暂留模拟。其核心在于将‘瞬时切割感’转化为程序可执行的渲染逻辑:通过禁用纹理滤波保障1:1像素锐度,绑定刀锋向量控制粒子运动方向,限定≤0.15秒生命周期匹配人眼暂留阈值,并采用Stretched Billboard实现动态拉伸拖影。该方案兼顾美术语义(如直劈、横扫、突刺)与工程约束(Sorting Layer分层、对象池复用、单粒子GPU优化),广泛适用于Unity2D平台的动作反馈系统,尤其适配《空洞骑士》《死亡细胞》类高节奏像素R

weixin_32390647的博客 283

基于深度确定性策略梯度的永磁同步电机强化学习控制方法

本文提出了一种基于深度确定性策略梯度(DDPG)的永磁同步电机(PMSM)电流内环智能控制方法。首先建立了PMSM在d-q坐标系下的数学模型,分析了传统矢量控制双闭环系统中PI控制器的局限性。针对电流内环控制问题,设计了包含电流跟踪误差、转速信息和历史控制量的状态空间,将电压输出作为动作空间,并构建了兼顾跟踪精度和响应速度的奖励函数。通过DDPG算法训练智能体,使其能够自适应调整控制策略。仿真结果表明,与固定参数的PI控制器相比,DDPG控制器在动态响应速度和抗干扰能力方面具有明显优势,为PMSM高性能控制

huanghm88的专栏 104

java sax 读取xml_Java Sax解析xml

一、概述SAX,全称Simple API for XML,是一种以事件驱动的XMl API,是XML解析的一种新的替代方法,解析XML常用的还有DOM解析,PULL解析(Android特有),SAX与DOM不同的是它边扫描边解析,自顶向下依次解析,由于边扫描边解析,所以它解析XML具有速度快,占用内存少的优点,对于Android等CPU资源宝贵的移动平台来说是一个巨大的优势。SAX的优点:解析速度...

weixin_42118160的博客 384

Couldn‘t agree a key exchange algorithm(available:curve25519-sha256,curve25519-sha256@libssh.org解决方案

本文主要介绍了Couldn’t agree a key exchange algorithm(available:curve25519-sha256,curve25519-sha256@libssh.org解决方案,希望能对使用winscp的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 方案一 2.2 方案二

weixin_43178406的博客 4万+

通用SAX解析XML为Java对象

前言 ​ 有时候经常需要解析XML文件中的数据,将数据转化成**Java中的对象,为了不重复编写代码,能不能有一个通用的XML解析类?即对于任意XML文件,均可以解析成对应的Java**对象? SAX解析 ​ SAX (Simple API for XML):该规范和DOM规范有着明显的区别,虽然SAX也是一套对XML文档进行分析的规范,但是其并不是基于XML文档的树形结构的,而是以数据流的方...

沧浪之水的博客 1005

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java基础之SAX解析XML

1. Java解析XML简介 Java库中提供了两种XML解析器: 像文档对象模型(Document Object Model,DOM)解析器这的树型解析器(tree parse),它们将读入的XML文档转换成树结构。 像XML简单API(Simple API for XML,SAX)解析器这样的流机制解析器(streaming parser),它们在读入XML文档时生成相应的事件。 2. S...

weixin_33747129的博客 202

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

java sax_在java中使用sax解析xml

在java中,原生解析xml文档的方式有两种,分别是:Dom解析和Sax解析Dom解析功能强大,可增删改查,操作时会将xml文档以文档对象的方式读取到内存中,因此适用于小文档Sax解析是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档本文主要讲解Sax解析,其余放在后面Sax采用事件驱动的方式解析文档。简单点说,如同在电影院看电影一样,从头到尾看一遍就完了,不能回退(Dom可来来回...

weixin_30591519的博客 214

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java使用SAX解析XML文件

XML (Extensible Markup Language可扩展标记语言),XML是一个以文本来描述数据的文档。 XML技术的用途: (1)充当显示数据(以XML充当显示层) (2)存储数据(存储层)的功能 (3)以XML描述数据,并在联系服务器与系统的其余部分之间传递。 从某种角度讲,XML是数据封装和消息传递技术。 SAX解析XML SAX是Simple API for XML的缩写 SAX是读取和操作XML数据更快速、更轻量的方法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才

java编程学习_java基础教程_booyzhang的博客 309

Java xml文件解析 sax 解析笔记

一般为以下步骤: 1、得到xml文件对应的资源,可以是xml的输入流,文件和uri 2、得到SAX解析工厂(SAXParserFactory) 3、由解析工厂生产一个SAX解析器(SAXParser) 4、传入输入流和handler给解析器,调用parse()解析 //1.创建解析工厂 SAXParserFactoryfactory=SAXParserF...

Matthew的博客 395

【XML和Java】Java程序+SAX对XML的解析输出

【XML和Java】Java程序+SAX对XML的解析输出;xml文件可以用来存放数据库连接必要的信息。程序员可以通过解析该xml文件得到数据库连接的必要信息,并且在后期更改数据库连接时也能更方便,增强程序的可读性。

peng_YuJun的博客 1105

在java中使用sax解析xml

在java中,原生解析xml文档的方式有两种,分别是:Dom解析和Sax解析 Dom解析 功能强大,可增删改查,操作时会将xml文档以文档对象的方式读取到内存中,因此适用于小文档 Sax解析 是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档 本文主要讲解Sax解析,其余放在后面 Sax采用事件驱动的方式解析文档。简单点说,如同在电影院看电影一样,从头到尾看一遍就完了,不能回退(Dom可来来回回读取) 在看电影的过程中,每遇到一个情节,一段泪水,一次擦肩,你都会调动大脑和神经去接收或处理这些

weixin_53341657的博客 389

java xml解析_XMl的理解以及SAX解析流程

XML一般用来存储数据作为数据存储的一种格式XML还可以用于作为软件的参数配置这里讲下如何理解java中的相对路径在java中如何获取当前的路径,当我们知道当前的路径了以后我们就可以使用绝对路径了package cn.jd.server.basic; import java.io.IOException; import javax.xml.parsers.ParserConfiguration...

weixin_39934302的博客 95

Java之xml解析(Sax方式)

Sax(Simple API for XML)采用事件驱动的方式边读边解析文档。

qq_44166712的博客 3241

Java解析XML(DOM解析和SAX解析)

前言:在程序中访问和操作XML文件一般有两种模型:DOM(文档对象模型)和流模型;在本篇文章中分别对应DOM解析和SAX解析。 1 .DOM解析与SAX解析的相关知识点 1.1 DOM 文档对象模型(Document Object Model,简称DOM),是W3C制定的标准接口规范,是一种处理HTML和XML文件的标准API。 将HTML或XML文档转化为DOM树的过程称为解析(parse)。HTML文档被解析后,转化为DOM树,因此对HTML文档的处理可以通过对DOM树的操作实现。DOM模型不仅描述了

MrYushiwen的博客 2158

sax xml java_java中使用sax解析xml的解决方法

在java中,原生解析xml文档的方式有两种,分别是:Dom解析和Sax解析Dom解析功能强大,可增删改查,操作时会将xml文档以文档对象的方式读取到内存中,因此适用于小文档Sax解析是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档本文主要讲解Sax解析,其余放在后面Sax采用事件驱动的方式解析文档。简单点说,如同在电影院看电影一样,从头到尾看一遍就完了,不能回退(Dom可来来回...

weixin_30789475的博客 145

java sax解析复杂xml_SAX解析复杂的xml字符串

简单的xml我们可以通过转成javaBean实现解析。但是开发中xml一般都是一层嵌套一层的。转成javaBean明显是无法进行解析的。这里引入Sax解析。首先我们需要jdom.jar,没有的朋友可以从这里下载http://www.jdom.org/news/index.html。废话不多说直接上例子。import java.io.IOException;import java.io.String...

weixin_39796533的博客 312

java sax生成xml报文_SAX解析和生成XML文档

一、前言SAX操作xml是基于事件来完成的,自己只负责调用解析的方法,然后具体解析操作都是交给DefaultHandler处理者来完成的,总的来说使用SAX解析和生成xml文档还是比较方便的 。二、准备条件因为SAX是jdk自带的解析方式,所以不用添加jar包引用。三、使用SAX实战1、解析xml文档实现思路:<1>先由SAXParserFactory这个工厂的实例生产一个SAXPar...

weixin_32576389的博客 838
上一篇: Comparable 和 Comparator
下一篇: FLASH、EPPROM、RAM等存储器
剑之所向
博客等级 码龄11年 228粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值