文章标题
2016-10-26 11:18
429 查看
1、很久没有写博客了,今天和大家分享一下关于SAX的心得,以及如何简单解析。
本代码是一个简单的xml,仅供测试之用。
SAX简介
1、SAX适合处理数据流类型的数据,当碰到数据时,比如通过了<elelment1>在通过<element5>的时候,在此时前面一个已经丢失。 2、SAX的解析是将标签分为标签开始(startelement),标签结束(endelement),和字符串(character)的形式解析的。这三种方法以及其他的方法都继承类DefaultHandle. 3、方法的介绍: startelement:当遇到开始标签的时候,自动调用该方法。 character:在标签中读取该标签内字符串 endelelment:当遇到结束时,自动调用该方法。
程序测验
XML文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <书架> <书> <书名>java开发大全</书名> <作者>毛大大</作者> <售价>19.9</售价> <简介>这是一本牛逼的书</简介> </书> <书> <书名>毛毛开发大全</书名> <作者>郭大大</作者> <售价>19.9</售价> <简介>这是一本牛逼的书</简介> </书> </书架>
本代码是一个简单的xml,仅供测试之用。
SAX解析代码片:
一下的代码解析了整个xml文档,同时拿到了标签里面的内容。拿取方法相较于JAXP来说要简单很多。package maomao; import javax.xml.parsers.ParserConfigurationException; 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; /** * 本测试为如何使用SAX解析器对XML文件进行解析 * @author Dale * */ public class JaxpSaxTest { public static void main(String[] args) { try { run1(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void run1() throws Exception { //SAX解析工厂类 SAXParserFactory spf = SAXParserFactory.newInstance(); //调取SAX解析器对象 SAXParser sParser= spf.newSAXParser(); sParser.parse("src/book2.xml",new MyHandle()); } } /** * 目的:获取作者标签,或者获取某标签 * @author Dale *通过判断来达到效果 */ class MyHandle1 extends DefaultHandler { //定义一个全局变量作为标准变量, private boolean flag = false; public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException { //qName是获取的标签名,通过equals方法进行对比 if ("作者".equals(qName)) { flag=true; } } public void characters(char[] ch, int start, int length)throws SAXException { if (flag) { //当flag为true时执行下面方法 String string= new String(ch,start,length); System.out.println(string); } } public void endElement(String uri, String localName, String qName)throws SAXException { flag=false; } } /** MyHandle类继承DefaultHandle方法 需要重写方法startelement,endelement,character **/ class MyHandle extends DefaultHandler{ public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); } //当读取到标签开头时,默认调用此方法 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub System.out.println("开始标签:"+qName); } //当读取到字符串时默认调用此方法 public void characters(char[] ch, int start, int length)throws SAXException { String string =new String(ch,start,length); System.out.println(string); } //读取到标签结束默认实现此方法 public void endElement(String uri, S 4000 tring localName, String qName)throws SAXException { System.out.println("结束标签:"+qName); } public void endDocument() throws SAXException { super.endDocument(); } }