你的位置:首页 > Java教程

[Java教程]JAVA解析XML之SAX方式


JAVA解析

SAX解析

  通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory
  通过SAXParserFactory实例的newSAXParser()方法返回SAXParser实例parser
  创建一个类继承DefaultHandle,重写方法进行业务处理并创建这个类的实例handle

 

重写DefaultHandle类的方法

  startElement方法用来遍历

  endElement方法用来遍历

  startDocument方法用来标识解析开始;

  endDocument方法用来标识解析结束。

  characters方法用来获取text

  其中:参数qName 遍历到的元素的名称

     且同样会出现空白和换行的问题

下面直接上代码

<??><bookstore>  <book id="1">    <name>JAVA编程思想</name>    <anthor>****</anthor>    <year>2000</year>  </book>  <book id="2">    <name>疯狂JAVA系列</name>    <anthor>李刚</anthor>    <price>89</price>  </book></bookstore>

books.
SAX.java
package pers.zww.import javax.import org.import org.import org.public class SAXParserHandler extends DefaultHandler{  int bookIndex=0;  /*   * 解析*/  @Override  public void startElement(String uri, String localName, String qName,      Attributes attributes) throws SAXException {    super.startElement(uri, localName, qName, attributes);    //开始解析book元素的属性        if (qName.equals("book")) {      bookIndex++;      System.out.println("开始遍历第"+bookIndex+"本书");      //      //已知book元素下的属性名称,根据属性名称获取属性值//      String value=attributes.getValue("id");//      System.out.println("book的属性值:"+value);      //未知book元素下的属性名称及个数      int num=attributes.getLength();      for (int i = 0; i < num; i++) {        System.out.print("book元素的第"+(i+1)+"个属性名:"+attributes.getQName(i));        System.out.println(" && 属性值:"+attributes.getValue(i));              }    }else if(!qName.equals("book")&&!qName.equals("bookstore")){      System.out.print("节点名:"+qName);          }else {          }  }  @Override  public void characters(char[] ch, int start, int length)      throws SAXException {    // TODO Auto-generated method stub    super.characters(ch, start, length);    String val=new String(ch, start, length);    if (!val.trim().equals("")) {      System.out.println(" && 节点值:"+val);    }  }    /*   * 用来遍历*/  @Override  public void endElement(String uri, String localName, String qName)      throws SAXException {    super.endElement(uri, localName, qName);    //是否针对一本书已经遍历结束    if (qName.equals("book")) {      System.out.println("=======================");    }  }    /*   * 用来标志解析开始   */  @Override  public void startDocument() throws SAXException {    // TODO Auto-generated method stub    super.startDocument();    //第一行开始    System.out.println("SAX解析开始");  }    /*   * 用来标志解析结束   */  @Override  public void endDocument() throws SAXException {    // TODO Auto-generated method stub    super.endDocument();    //最后一行结束    System.out.println("SAX解析结束");  }}

SAXParserHandler.java

SAX与DOM对比

  DOM解析原理:先把

  SAX解析原理:通过自己创建的Handler类,去逐个分析遇到的每一个节点;(节点分析是从最外层向里层逐个开始).

参考资料

  慕课网JessicaJiang老师视频教程 链接:http://www.imooc.com/video/3789