当前位置: 首页 > news >正文

java学习第二阶段day7

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

.xml文件解析(sax pull) 

sax 解析

//1、创建一个学生类 继承DefaultHandler类
//然后重写startDocument endDocument startElement endElement characters 方法
//2、在解析.xml文件时 先 进入xml文档重写的方法startDocument
//3、然后进入开始标记startElement
//4、在进入标记之间的内容方法里 characters
//5、在进入结束标记方法里 endElement
//6、最后 进入结束xml的文档标志方法里 endDocument

学生类

public class Student {
 public String name;
 public int age;
 public int id;
 public String toString() {
  return "Student [name=" + name + ", age=" + age + ", id=" + id + "]";
 }
}

-----------------

StudentHandler 类

public class StudentHandler extends DefaultHandler {
 private String tag;//保存标记名
 private Student stu;
 private List<Student> list;
 //
 public List<Student> getlist(){
  return list;
 }
 public void startDocument() throws SAXException {
  list = new ArrayList<Student>();
 }

 public void endDocument() throws SAXException {
 }
//开始的标记
 public void startElement(String uri, String localName, String qName,
   Attributes attributes) throws SAXException {
  tag = qName;
  if("student".equals(tag)){
   stu = new Student();
   //如果开始标记 有 属性
   for(int i = 0;i<attributes.getLength();i++){
    //获取开始标记 里的 属性标记
    String q_name = attributes.getQName(i);
    //获取 开始标记里的 属性标记 的内容
    String content = attributes.getValue(i);
    if("id".equals(q_name)){
     stu.id = Integer.parseInt(content);
    }else if("name".equals(q_name)){
     stu.name = content;
    }else if("age".equals(q_name)){
     stu.age = Integer.parseInt(content);
    }
    
   }
  }
 }
//结束标记
 public void endElement(String uri, String localName, String qName)
   throws SAXException {
  if("student".equals(qName)){
   list.add(stu);
  }
  tag = "";
 }
//标记之间的内容
 public void characters(char[] ch, int start, int length)
   throws SAXException {
  String str = new String(ch,start,length);
  if("id".equals(tag)){
   stu.id = Integer.parseInt(str);
  }else if("name".equals(tag)){
   stu.name = str;
  }else if("age".equals(tag)){
   stu.age = Integer.parseInt(str);
  }
 }
 
}

---------------------
测试类 SaxXml


public class SaxXml {
 public static void main(String[] args) throws Exception {
  //得到解析工厂
  SAXParserFactory factory = SAXParserFactory.newInstance();
  //通过工厂获得解析器
  SAXParser parser = factory.newSAXParser();
  StudentHandler handler = new StudentHandler();
  //将文件 和 studenthandler 和 解析器 相关联
  parser.parse("d:\\Student2.xml", handler);
  //需要得到解析的集合
  List<Student> list = handler.getlist();
   for(Student s : list){
    System.out.println(s);
   }
 }
}
-----------------------------------------------------------------------------

pull 解析

Student2 类

public class Student2 {

 public String name;
 public int age;
 public int id;
 @Override
 public String toString() {
  return "Student2 [name=" + name + ", age=" + age + ", id=" + id + "]";
 }
 
}


------------
pullxml  类

public class PullXml {
 public static void main(String[] args) {
  //pull 解析 xml 文件
  //需要导入 第三方包 kxml
  //1、创建一个student 类
  XmlPullParserFactory factory;
  try {
   //创建一个解析工厂
   factory = XmlPullParserFactory.newInstance();
   //从 解析工厂 获得解析器
   XmlPullParser parser = factory.newPullParser();
   //设置 要解析.xml文件 的路径
   parser.setInput(new FileInputStream("d:\\student.xml"),"utf-8");
   //获取 事件类型
   //事件类型有START_DOCUMENT(xml文件开始标记)
   //START_TAG(xml开始标记)
   //END_DOCUMENT(xml文件结束标记) END_TAG(xml结束标记)
   int type = parser.getEventType();
   //用while循环 如果 不是 xml文件结束标记 就一直 在里面循环
   String tag;
   List<Student2> list = null;
   Student2 stu = null;
 while(type != XmlPullParser.START_DOCUMENT){
    //获取标记 名字
 tag = parser.getName();
 switch(type){
 case XmlPullParser.START_TAG:
 //如果开始标记 是student 就new 一个学生 对象
 if("student".equals(tag)){
 stu = new Student2();
 //如果 开始标记 里面也有 标记 属性
 for(int i = 0;i<parser.getAttributeCount();i++){
       //获取开始标记 里面的 标记属性 名字
 String attribute_name = parser.getAttributeName(i);
       //获取开始标记 里面的标记属性 值
        String attribute_value = parser.getAttributeValue(i);
 if("id".equals(attribute_name)){
 stu.id = Integer.parseInt(attribute_value)
 }else if("name".equals(attribute_name)){
 stu.name = attribute_value;
 }else if("age".equals(attribute_name)){
 stu.age = Integer.parseInt(attribute_value);
 }
 }
//---------------------------------------------- 
 }else if("name".equals(tag)){
 stu.name = parser.nextText();
       //把整数 转换为字符串
 }else if("id".equals(tag)){
 stu.id = Integer.parseInt(parser.nextText());
 }else if("age".equals(tag)){
 stu.age = Integer.parseInt(parser.nextText());
 }
 break;
 case XmlPullParser.END_TAG:
 //如果结束标记 为student 就把 对象 添加到集合里
 if("student".equals(tag)){
 list.add(stu);
 }
 break;
 default:
 } 
 //跳到下一个 常量 得到事件常量
 type = parser.next();
 }
  } catch (XmlPullParserException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
   
 }
}

转载于:https://my.oschina.net/u/2542711/blog/596173

相关文章:

  • 如何检测出定制服务器中预装的恶意软件?
  • Unity中使用ulua的个人经验总结
  • Spring获取bean
  • erlang远程调用示例
  • AAC头部格式,RTP打包格式
  • JNDI学习总结(3)——Tomcat下使用C3P0配置JNDI数据源
  • 51 Nod 1057 N的阶乘【Java大数乱搞】
  • 矛与盾——扫描器盲打对主动安全防护的启示
  • Linux运行级别的配置文件
  • Swift Strings and Characters
  • Munin监控的安装与配置
  • [转载]PhotoShop性能优化
  • [转]公钥,私钥和数字签名这样最好理解
  • 利用国内的源安装 Python第三方库
  • [数据结构]链表的实现在PHP中
  • AHK 中 = 和 == 等比较运算符的用法
  • ES6语法详解(一)
  • hadoop集群管理系统搭建规划说明
  • JavaScript服务器推送技术之 WebSocket
  • Java教程_软件开发基础
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • js正则,这点儿就够用了
  • laravel with 查询列表限制条数
  • Mysql数据库的条件查询语句
  • React 快速上手 - 07 前端路由 react-router
  • React-生命周期杂记
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Yeoman_Bower_Grunt
  • 爱情 北京女病人
  • 大整数乘法-表格法
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 反思总结然后整装待发
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 规范化安全开发 KOA 手脚架
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 机器学习中为什么要做归一化normalization
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端代码风格自动化系列(二)之Commitlint
  • 浅谈web中前端模板引擎的使用
  • 如何实现 font-size 的响应式
  • 转载:[译] 内容加速黑科技趣谈
  • 《天龙八部3D》Unity技术方案揭秘
  • 【云吞铺子】性能抖动剖析(二)
  • 回归生活:清理微信公众号
  • #{}和${}的区别?
  • #HarmonyOS:基础语法
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #每日一题合集#牛客JZ23-JZ33
  • $.ajax()
  • $.ajax()方法详解
  • (4.10~4.16)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题