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
java--xml文件读取(SAX)相关推荐
- jdom 读取xml_JDOM分析器–将XML文件读取为Java对象
jdom 读取xml JDOM parser provides us a great Java XML API to read, edit and write XML documents easily ...
- Java CSV文件读取、写入及追加
Java CSV文件读取.写入及追加 https://blog.csdn.net/liq816/article/details/81286472 追加: FileOutputStream out = ...
- saxreader读取服务器xml文件,使用SAXReader从xml文件读取元素
我试图使用SAXReader读取下面的xml内容 我必须读取节点名称"SelogerListController"的子元素. 节点名称"SelogerListContro ...
- javascript读取xml文件读取节点数据的例子
分享下用javascript读取xml文件读取节点数据方法. 读取的节点数据,还有一种情况是读取节点属性数据. <head> <title></title> < ...
- 从XML文件读取数据绑定到列表控件2
ComponentArt.Web.UI控件绑定所用XML,同时用于DropDownList的绑定,XML如下: <SiteMap> <item Text="标题一&qu ...
- java压缩文件读取_用Java读取/写入压缩和非压缩文件
java压缩文件读取 这篇文章的主要原因是尝试不要重复自己( DRY ),因为通常,我会遇到递归的需求,即读写压缩的和非压缩的文件(主要是JSON和CSV). 首先让我们看看如何读取文本文件. 注意我 ...
- java操作XML文件--读取内容
先把问题贴出来:编写一个可以解析xml及修改xml内容的工具类 由于我以前做过Android应用程序开发,之前也解析过xml文件,所以,这道题不是很难,这篇文章我先解决第一个问 ...
- java xml文件内容替换_java读取xml文件并转换成对象,并进行修改
1.首先要写工具类,处理读取和写入xml文件使用的工具.XMLUtil.java importjava.io.FileInputStream;importjava.io.FileWriter;impo ...
- java sax xml文件解析_java解析xml文件-DOM/SAX
java解析xml文件的两种方式 1:DOM 原理:把整个文档加载到内存,转化成dom树,之后应用程序可以随机的访问dom树的任何数据,灵活 快,但消耗内存 一个简单的xml 使用java解析 //b ...
- Java中解析XML文件之SAX方式
1.SAX解析方式,是将XML文件逐行读进内存进行解析的. 2.首先编写一个SAXHandler(SAX处理类),这个类需要继承DefaultHandler类 3.在SAXHandler类中需要重写s ...
最新文章
- 为什么 CTO、技术总监、架构师都不写代码,还这么牛?
- Centos7 修改运行级别
- [bzoj3143] [HNOI2013]游走
- 标准粒子群算法(PSO)及其Matlab程序和常见改进算法
- 表贴电阻尺寸与什么有关_PCB板上为什么要“贴黄金”?
- 云炬随笔20210731(2)
- 2014年世界互联网大会---马云篇
- Git使用命令行回退版本git reset --hard
- 阿里《Java手册》做一个有技术情怀的人
- 消息中间件—Kafka 的设计思想
- [leetcode]5179. 将二叉搜索树变平衡
- 用C/C++编程技术教你制作彩票随机程序
- 今天解封了,该递交作业了,我做了个智能机器人
- 蛋白质组学与转录组学联合分析
- 【微信红包封面】哆啦A梦 x GUCCI古驰限定版!!
- 双系统如何修改系统默认启动项?简易教程
- 弗洛伊德与他的精神分析学
- 设置短信验证码开发的回调地址-短信平台验证码开发9
- 异或的4种神奇的运用场景
- STM32小四轴超低成本方案开源项目
热门文章
- 平衡二叉树的自顶向下递归和自底向上递归
- 名为 cursor_jinserted 的游标不存在_生鲜电商存在的问题及对策解析:未来生鲜电商如何发展?...
- Java instead of 用法_我又不是你的谁--java instanceof操作符用法揭秘
- 巡回沙龙_美浮特全国巡回沙龙第一期结束撒花!
- android仿高德地图透明黑字,Android 仿高德地图可拉伸的BottomSheet
- Brush notes:stack、queue、heap
- 【数据结构基础笔记】【顺序表】
- scala字符串的拉链操作_在Scala中对字符串进行操作
- 第五章 条件、循环及其他语句
- php 字符串匹配 like,ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法...