Java解析xml文档之SAX解析
2016-07-16 00:59
501 查看
sax解析是一种边读边解析,仅向前读取,不能修改,用来读。
sax创建XMLReader三步:
SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); XMLReader reader = parser.getXMLReader();
sax是使用类似于监听机制和适配器思想来做解析的,里面去覆盖方法:
reader.setContentHandler(new DefaultHandler(){}
具体实例代码如下:
sxaDemo
package cn.hncu.sax_stax; import java.awt.Button; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.junit.Test; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class SaxDemo { @Test //了解Sax解析的生命周期(工作流程) public void SaxDemo1() throws Exception{ SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); XMLReader reader=parser.getXMLReader(); reader.setContentHandler( new DefaultHandler(){ @Override public void startDocument() throws SAXException { System.out.println("1 开始读取文档了...."); } @Override public void endDocument() throws SAXException { System.out.println("10 文档读取结束了...."); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("一个元素开始...."); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("一个元素结束...."); } }); reader.parse("./xml5/users.xml"); System.out.println("Over....."); } //用SAX解析xml的基本套路 @Test public void SaxDemo2() throws Exception{ SAXParserFactory factory = SAXParserFactory.newInstance();//1 SAXParser parser = factory.newSAXParser();//2 XMLReader reader = parser.getXMLReader();//3 reader.setContentHandler(new DefaultHandler(){ //覆盖相应的事件处理方法---最核心的步骤※※※※ });//4 reader.parse("./xml5/users.xml");//5 } /* * 需求:输出xml文档的数据信息,格式如下: * id:A001 name:Jack age:25 ------------ id:A002 name:张三 age:80 ----------- 。。。。。 */ private String elementName="@#"; @Test public void SaxDemo3() throws Exception{ SAXParserFactory factory = SAXParserFactory.newInstance();//1 SAXParser parser = factory.newSAXParser();//2 XMLReader reader = parser.getXMLReader();//3 reader.setContentHandler(new DefaultHandler(){ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if(qName.equals("user")){ String id = attributes.getValue("id"); System.out.println("id:"+id); }else if(qName.equals("name") || qName.equals("age")){ elementName = qName; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if(qName.equals("name") || qName.equals("age")){ elementName ="@#"; }else if(qName.equals("user")){ System.out.println("--------------"); } } //读取:xml文档中的“文本内容”---不包含属性和标签,但是含有空格和换行等空白符 @Override public void characters(char[] ch, int start, int length) throws SAXException { if(!elementName.equals("@#")) System.out.println(elementName+":"+new String(ch,start,length)); } });//4 reader.parse("./xml5/users.xml");//5 } }
users.xml
<?xml version="1.0" encoding="utf-8"?> <users> <user id="A001"> <name>jack</name> <age>23</age> </user> <user id="b001"> <name>Mike</name> <age>25</age> </user> </users>
相关文章推荐
- JavaSE关键语句
- JavaWeb核心编程之(三.1)ServletHello
- java开发中常用的SQL语句
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)
- 使用myeclipse的反向工程来生成相应的hibernate映射文件和POJO类
- Java JPanel的getSize()方法 有时候得到的结果为0 的原因(涉及语句顺序、paint方法的调用)
- Java序列化几点注意事项
- 理解JVM——Java内存区域
- 基于java反射的Spring事务代理下的JUnit测试
- 【Eclipse】properties文件中文显示ASCII码解决办法之在eclipse安装PropertiesEditor
- Java使背景图片自适应窗体的办法
- Eclipse编译器之使用Maven搭建Web工程
- 使用spring-mvc实现文件上传
- GitHub上那些值得一试的Java开源库
- JAVA学习日志(6-4-单例设计模式)
- 自定义光标
- Java数据库操作之调用存储过程
- Java文件操作
- java mail发送邮件
- JAVA并发编程(四)任务的取消与关闭