java--xml文件读取(SAX)

SAX解析原理:

 使用Handler去逐个分析遇到的每一个节点

SAX方式解析步奏:

创建xml解析需要的handler(parser.parse(file,handler)) 

package com.imooc_xml.sax.handler;import java.util.ArrayList;import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;import com.imooc_xml.sax.entity.Book;public class SAXParserHandler extends DefaultHandler {//使用全局变量可以使本类的各个方法通用,联系int bookIndex = 0 ;String value = null;Book book = null;private ArrayList<Book> bookList = new ArrayList<Book>();public ArrayList<Book> getBookList() {return bookList;}/*** 用来遍历xml文件的开始标签*/@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {// TODO Auto-generated method stubsuper.startElement(uri, localName, qName, attributes);解析xml文件的节点属性,只有book节点有属性if(qName.equals("book")){book = new Book();bookIndex++;//已知book的属性名
//            attributes.getValue("id");//不知book元素的属性名和个数int num = attributes.getLength();for(int i=0;i<num;i++){//book元素的第i+1个属性名
                attributes.getQName(i);attributes.getValue(i);if(attributes.getQName(i).equals("id")){book.setId(attributes.getValue(i));}}}else if (!qName.equals("book")&&!qName.equals("bookstore")){//节点名
            System.out.println(qName);}}/*** 用来遍历xml文件的结束标签*/@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);//判断是否针对一本书已经遍历结束if (qName.equals("book")){bookList.add(book);book = null;System.out.println("结束遍历第"+bookIndex+"本书");}else if(qName.equals("name")){book.setName(value);}else if(qName.equals("author")){book.setAuthor(value);}else if(qName.equals("year")){book.setYear(value);}else if(qName.equals("price")){book.setPrice(value);}else if(qName.equals("language")){book.setLanguage(value);}}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stubsuper.characters(ch, start, length);//ch是节点之间的文本内容value = new String(ch, start, length);//判断空格和换行if(!value.trim().equals("")){System.out.println(value);}}/*** 用来标志解析开始*/@Overridepublic void startDocument() throws SAXException {// TODO Auto-generated method stubsuper.startDocument();System.out.println("SAX解析开始");}/*** 用来标志解析结束*/@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stubsuper.endDocument();System.out.println("SAX解析结束");}
}

创建hanlder类

SAX解析准备工作:

package com.imooc_xml.sax.test;import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;import com.imooc_xml.sax.handler.SAXParserHandler;public class SAXTest {public static void main(String[] args) {//通过SAXParserFactory的静态newInstance()方法获取SAXParserFactory的实例factorySAXParserFactory factory = SAXParserFactory.newInstance();try {//通过factory获取SAXParser实例SAXParser parser = factory.newSAXParser();//创建一个handler对象SAXParserHandler handler = new SAXParserHandler();parser.parse("xml/books.xml", handler);} catch (ParserConfigurationException | SAXException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}}
}

 使用SAX解析xml文件的节点属性:

//只有book节点有属性if(qName.equals("book")){//已知book的属性名
//            attributes.getValue("id");//不知book元素的属性名和个数‘int num = attributes.getLength();for(int i=0;i<num;i++){//book元素的第i+1个属性名
                attributes.getQName(i);attributes.getValue(i);}}

使用SAX解析xml文件的节点值

 @Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stubsuper.characters(ch, start, length);//ch是节点之间的文本内容value = new String(ch, start, length);//判断空格和换行if(!value.trim().equals("")){System.out.println(value);}}

 

在Java中保留xml数据的结构

public class Book {private String id;private String name;private String author;private String year;private String price;private String language;

获取对象集合:

handler.getBookList().size();for(Book book:handler.getBookList()){System.out.println(book.getId());
          ....}

 

转载于:https://www.cnblogs.com/Nyan-Workflow-FC/p/6412246.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

imp命令导入指定表_Sqoop 使用shell命令的各种参数的配置及使用方法

点击上方蓝色字体&#xff0c;选择“设为星标”回复”资源“获取更多资源本文作者&#xff1a;Sheep Sun本文链接&#xff1a;https://www.cnblogs.com/yangxusun9/p/12558683.html大数据技术与架构点击右侧关注&#xff0c;大数据开发领域最强公众号&#xff01;暴走大数据点击…

ik分词和jieba分词哪个好_Pubseg:一种单双字串的BiLSTM中文分词工具

中文分词是中文自然语言处理中的重要的步骤&#xff0c;有一个更高精度的中文分词模型会显著提升文档分类、情感预测、社交媒体处理等任务的效果[1]。Pubseg是基于BiLSTM中文分词工具&#xff0c;基于ICWS2005PKU语料训练集训练而成&#xff0c;其优点在于在ICWS2005-PKU语料下…

小白做淘客店铺新玩法

微信淘客在朋友圈刷了将近两个月。有些大咖赚得盆满钵满&#xff0c;有些小白交了不少学费。有人日入几千几万&#xff0c;也有入不敷出。在此咖妹并没有褒贬之意&#xff0c;只是提醒大家&#xff0c;不光淘客如此&#xff0c;其他项目亦是如此&#xff0c;别人能做成功的项目…

python sum函数numpy_如何用numba加速python?

我把写好的markdown导入进来&#xff0c;但是没想到知乎的排版如此感人。如果对知乎排版不满想要看高清清爽版&#xff0c;请移步微信公众号原文 如何用numba加速python&#xff1f;同时欢迎关注前言说道现在最流行的语言&#xff0c;就不得不提python。可是python虽然容易上手…

[ZJOI2019]麻将

Luogu5279 , LOJ3042题意&#xff1a;给出初始13张手牌&#xff0c;求理论可以和牌的最小轮数的期望&#xff0e;定义和牌为&#xff1a;4句话1对乱将&#xff0c;不能有杠&#xff1b;七对 原始题解-shadowice 写得很好的题解 首先分析期望&#xff1a;\(<--\)所有和牌的步…

采样次数不同平均值不一样_不同的真石漆装饰效果也是不一样的

外墙真石漆真的是一件很好的产品&#xff0c;具有防火性、防水性、安全且环保、粘力强、永不褪色等特点&#xff0c;无疑是人们较好的选择&#xff0c;在很早之前就已经逐渐的取代了瓷砖和其他石材在人们心中的位置。真石漆的品种不止一种&#xff0c;按照装饰效果我们可以分为…

android项目方法数超过65536的解决办法

2019独角兽企业重金招聘Python工程师标准>>> 当项目的总方法数超过65536个&#xff0c;运行在手机上&#xff0c;指不定会报找不到哪个文件的错。 我把项目的PullRefresh框架切换为SmartRefresh框架出现了方法数超过65536。 此文只是做一下笔记&#xff0c;不多做解…

python快乐数字怎么表达_Python经典面试题:这些面试题你会了吗?

前言什么&#xff1f;你要去找工作&#xff1f;先别急着找工作&#xff0c;先把下面的python面试题先给看了吧&#xff0c;不然你就只是去面试而不是找工作。话说不打没准备的仗&#xff0c;下面这些基本的面试题都不会你怎么可能找到工作呢&#xff1f;还是先把下面的东西1、P…

【swift学习笔记】三.使用xib自定义UITableViewCell

使用xib自定义tableviewCell看一下效果图 1.自定义列 新建一个xib文件 carTblCell&#xff0c;拖放一个UITableViewCell,再拖放一个图片和一个文本框到tableviewcell上 并给我们的xib一个标识 为了学习&#xff0c;我这里的xib和后台的class是分开建的。我们再建一个cocoa touc…

命令模式(Command Pattern)

1命令模式是一个高内聚的模式。定义如下&#xff1a;将一个请求封装成一个对象&#xff0c;从而让你使用不同的请求把客户端参数化&#xff0c;对请求排队或者记录请求日志&#xff0c;可以提供命令的撤销和恢复功能。 2.角色说明&#xff1a; ● Receive接收者角色 该角色就…

graphpad7.04多组比较p值_同是折线图为何你却这么优秀,这才是多组数据作图应该有的样子...

相信大家对Excel做折线图应该不陌生&#xff0c;在展示数据的时候&#xff0c;图表是一种最好的展示方法。但是经常会碰到一种尴尬的事情就是&#xff0c;当数据维多比较多的时候&#xff0c;做出的图表就会显得非常难看。今天我们就来学习一下&#xff0c;多组数据怎么做折线图…

linux 运行 chom,Hadoop安装-单节点/伪分布(2.7.3)

1&#xff0c;下载Hadoop目前在Ubuntu的软件库里面 没有发现Hadoop的压缩包&#xff0c;没猜错Hadoop不是可执行文件 只是一个压缩包吧&#xff01;所以我们只能自己到官网下载(http://hadoop.apache.org/releases.html)&#xff1b;在Apache社区中&#xff0c;下载软件的时候…

app之---豆果美食

1.抓包 2.代码 抓取&#xff1a; #!/usr/bin/env python # -*- coding: utf-8 -*- #author tom import requests from multiprocessing import Queue from handle_pymongo import mongo from concurrent.futures import ThreadPoolExecutorclass Douguo():def __init__(self):s…

语言坐标度分秒的换算_测量位置度说明

测量位置度说明位置度是限制被测要素的实际位置对理想位置变动量的指标。它的定位尺寸为理论正确尺寸。位置度公差在评定实际要素位置的正确性, 是依据图样上给定的理想位置。位置度包括点的位置度、线的位置度和面的位置度。[1] 点的位置度:如公差带前加S&#xffe0;&#xf…

OpenStack创建win7实例遇到的问题(尚未解决,求帮助)

原地址在这里&#xff1a;&#xff08;作者也是我&#xff0c;害羞&#xff09;http://www.aboutyun.com/forum.php?modviewthread&tid22898 小白经过两天尝试&#xff0c;用fuel部署好了OpenStack的云平台&#xff0c;接下来想在Compute节点上创建一个win7 实例&#xff…

VMware使两台windows虚拟机能够互相ping通

如果以下内容测试无效&#xff0c;可参考另一篇&#xff1a;VMware虚拟机配置内网电脑能访问 1.关闭防火墙 cmd命令行里输入&#xff1a;netsh firewall set opmode disable 2.测试如果还不能ping通&#xff0c;就把网络类型选nat类型 3.测试&#xff1a;vmware网关默认是.2 转…

linux账号前有个base,安装 aconda 后Linux的终端界面前部出现(base)字样

aconda 是做什么用的这里就不说了&#xff0c;一般玩Python的都知道这东西&#xff0c;最早接触这东西是因为它把NVIDIA中cuda计算和Python互连的一个库拿下了&#xff0c;是买下来了还是专业&#xff0c;还是唯一合作的也就记不清了&#xff0c;那就是 numba , 那些年头Python…

Spring 学习教程(一): 认识 Spring 框架

Spring 框架是 Java 应用最广的框架&#xff0c;它的成功来源于理念&#xff0c;而不是技术本身&#xff0c;它的理念包括 IoC (Inversion of Control&#xff0c;控制反转) 和 AOP(Aspect Oriented Programming&#xff0c;面向切面编程)。 Spring 的框架结构 Data Access/Int…

小米网关控制空调伴侣_小米有品上架移动空调,支持语音控制

近日小米有品商城上架了一款互联网可移动空调&#xff0c;机身仅有小米空气净化器一般大小&#xff0c;底部安装了万向轮&#xff0c;支持多方位自由移动&#xff0c;拥有三大功能&#xff0c;兼顾去暑除湿能力&#xff0c;产品售价1599元&#xff0c;有需求的用户可以在小米有…

转载 JDK + Android-SDK + Python + MonkeyRunner 的安装

转载来自&#xff1a; 小海豚的博客 http://blog.sina.com.cn/u/1295334083 我只是搬运工。。。 JDK Android-SDK Python MonkeyRunner 的安装 1. Android-SDK介绍2. 安装 JDK, Android-SDK&#xff08;包含MonkeyRunner) , Python 3. 设置环境变量4. 验证是否安装成功1. …