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

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();

  }

  }

  }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值