JavaWeb学习日记----SAX解析XML
2019-04-18 08:55:59来源:博客园 阅读 ()
1.SAX解析XML文档的方式:
与DOM方式解析不同,DOM方式解析是根据XML的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象。优点是可以很方便实现增删改操作。缺点是,如果文件过大,会造成内存溢出。而SAX方式解析XML是采用事件驱动,边读便解析:从上到下,一行一行的解析,解析到某一个对象时,返回对象名称。优点是不会造成内存溢出,可以很方便实现查询操作,缺点是不能实现增删改操作。
2.在使用jaxp中的sax解析器之前,需要先获得sax解析器:
1)调用SAXParserFactory.newInstanse()方法得到创建SAX解析器的工厂
2)调用工厂对象的newSAXParse()方法得到saxParse解析器对象
3) 调用解析器对象的Parser()方法解析XML文档,该方法的参数有两个,XML文档所在路径和驱动事件对象。即: parse(File f, DefaultHandler dh)
或:parse(String url, DefaultHandler dh)
需要注意的是:在解析xml文档之前,我们需要自定义一个类,这个类继承自DefaultHandler,然后重写startElement()、characters()、endElement()这三个方法。
3.有如下XML文档
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <海贼王> <草帽海贼团> <船长>路飞</船长> <厨师>山治</厨师> <航海士>娜美</航海士> <船医>乔巴</船医> <音乐家>布鲁克</音乐家> <能力者>路飞</能力者> <能力者>乔巴</能力者> <能力者>布鲁克</能力者> </草帽海贼团> <草帽海贼团> <副船长>索隆</副船长> <考古学家>罗宾</考古学家> <狙击手>乌索普</狙击手> <船工>弗兰奇</船工> <能力者>罗宾</能力者> </草帽海贼团> </海贼王>
需求:获得第一个<能力者>标签的内容
代码如下:
package cn.roger.Jaxp; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /* * 使用Jaxp中的sax解析XML文档 */ public class SaxTest1 { public static void main(String[] args) throws Exception { // 创建解析器 SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); //创建事件驱动 MyHandler dh = new MyHandler(); parser.parse("src/OnePiece.xml", dh); } } class MyHandler extends DefaultHandler { boolean flag = false; int index = 0; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equals("能力者")) { flag = true; index++; } } @Override public void characters(char[] ch, int start, int length) throws SAXException { if (flag && index == 1) { System.out.println(new String(ch, start, length)); flag = false; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // System.out.print("</" + qName + ">"); } }
运行结果:
原文链接:https://www.cnblogs.com/fxxk/p/10728676.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 学习Java 8 Stream Api (4) - Stream 终端操作之 collect 2020-06-11
- java学习之第一天 2020-06-11
- Java学习之第二天 2020-06-11
- Spring WebFlux 学习笔记 - (一) 前传:学习Java 8 Stream Ap 2020-06-11
- Linux简单命令的学习 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash