java解析xml的几种方式 SAX解析

来源:互联网 发布:手机淘宝装修日记 编辑:程序博客网 时间:2024/06/05 01:17
sax:SAX的全称是Simple APIs for XML,也即XML简单应用程序接口。与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式。当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活相应的事件处理函数,应用程序通过这些事件处理函数实现对XML文档的访问,因而SAX接口也被称作事件驱动接口。

  Java代码

  import java.io.File;

  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;

  public class SaxTest1

  {

  public static void main(String[] args) throws Exception

  {


//step1: 获得SAX解析器工厂实例

  SAXParserFactory factory = SAXParserFactory.newInstance();

  //step2: 获得SAX解析器实例

  SAXParser parser = factory.newSAXParser();

  //step3: 开始进行解析

  parser.parse(new File("student.xml"), new MyHandler());

  }

  }

  class MyHandler extends DefaultHandler

  {

  @Override

  public void startDocument() throws SAXException

  {

  System.out.println("parse began");

  }

  @Override

  public void endDocument() throws SAXException

  {

  System.out.println("parse finished");

  }

  @Override

  public void startElement(String uri, String localName, String qName,

  Attributes attributes) throws SAXException

  {

  System.out.println("start element");

  }

  @Override

  public void endElement(String uri, String localName, String qName)

  throws SAXException

  {

  System.out.println("finish element");

  }

  }

  Java代码

  import java.io.File;

  import java.util.Stack;

  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;

  public class SaxTest2

  {

  public static void main(String[] args) throws Exception

  {

  SAXParserFactory factory = SAXParserFactory.newInstance();

  SAXParser parser = factory.newSAXParser();

  parser.parse(new File("student.xml"), new MyHandler2());

  }

  }

  class MyHandler2 extends DefaultHandler

  {

  private Stack<String> stack = new Stack<String>();

  private String name;

  private String gender;

  private String age;

  @Override

  public void startElement(String uri, String localName, String qName,

  Attributes attributes) throws SAXException

  {

  stack.push(qName);

  for(int i = 0; i < attributes.getLength(); i++)

  {

  String attrName = attributes.getQName(i);

  String attrValue = attributes.getValue(i);

  System.out.println(attrName + "=" + attrValue);

  }

  }

  @Override

  public void characters(char[] ch, int start, int length)

  throws SAXException

  {

  String tag = stack.peek();

  if("姓名".equals(tag))

  {

  name = new String(ch, start,length);

  }

  else if("性别".equals(tag))

  {

  gender = new String(ch, start, length);

  }

  else if("年龄".equals(tag))

  {

  age = new String(ch, start, length);

  }

  }

  @Override

  public void endElement(String uri, String localName, String qName)

  throws SAXException

  {

  stack.pop(); //表示该元素已经解析完毕,需要从栈中弹出

  if("学生".equals(qName))

  {

  System.out.println("姓名:" + name);

  System.out.println("性别:" + gender);

  System.out.println("年龄:" + age);

  System.out.println();

  }

  }

  }


0 0
原创粉丝点击