使用SAX解析xml文档

--------------------------------------------------------------xml文件-----------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
 <students>
  <student id="No1">
   <name>jacky</name>
   <sex>男</sex>
   <age>21</age>
   <address>成都</address>
  </student>
  <student id="No2">
       <name>mexican</name>
   <sex>女</sex>
   <age>22</age>
   <address>北京</address>
  </student>
  <student id="No3">
   <name>david</name>
   <sex>男</sex>
   <age>23</age>
   <address>上海</address>
  </student>
  <student id="No4">
   <name>android</name>
   <sex>男</sex>
   <age>24</age>
   <address>纽约</address>
  </student>
 </students>

================================================================================================

package org.demo.sax;

import java.io.File;
import java.io.IOException;
import java.util.Stack;

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.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class DemoSAX {

 public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {

  //1:构建xml解析器SAX工厂
  SAXParserFactory sAXParserFactory=SAXParserFactory.newInstance();
  //2:构建xml解析器SAX
  SAXParser sAXParser=sAXParserFactory.newSAXParser();
  sAXParser.parse(new File("student.xml"), new MyDefaultHander());
  
  //用于使用回调读取 XML 文档
  XMLReader reader=sAXParser.getXMLReader();
 }

}

class MyDefaultHander extends DefaultHandler{
 private Stack<String> stack=new Stack<String>();
 private String name;
 private String sex;
 private String age;
 private String address;
 
 
 
 
 
 public void startElement(String uri, String localName, String qName,
   Attributes attributes) throws SAXException {
  //此处进行压栈 
  stack.push(qName);
  if(null!=attributes){
   for (int i = 0; i < attributes.getLength(); i++) {
     String attrName=attributes.getQName(i);
     String attrValue=attributes.getValue(i);
     System.out.println(attrName+"="+attrValue);
   }
  } 
 }
 

 public void characters(char[] cs, int start, int length) throws SAXException {
  //将值取出来
  String target=stack.peek();
  
  if("name".equals(target)){
   name=new String(cs, start, length);
  }else if("sex".equals(target)){
   sex=new String(cs, start, length);
  }else if("age".equals(target)){
   age=new String(cs, start, length);
  }else if("address".equals(target)){
   address=new String(cs, start, length);
  }
  
  
 }
 
 public void endElement(String uri, String localName, String qName)
   throws SAXException {
  
  stack.pop();//表示该元素已经解析完毕,需要从栈中弹出
  
  if("student".equals(qName)){
   System.out.println("name:"+name);
   System.out.println("sex:"+sex);
   System.out.println("age:"+age);
   System.out.println("address:"+address);
   System.out.println();
  }
  
 }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值