文档章节

XML--Jaxp-StAX解析(安卓解析xml)

H
 HoneyHoney
发布于 2015/06/13 14:06
字数 607
阅读 11
收藏 0

核心类:

(StreamAPI - CursorAPI)

    1: XMLStreamReader - 用于读取xml文件。
             获取XMLStreamReader - 用XMLInputFactory

    2:XMLStreamWriter-用于写xml文件。

                                                        XMLoutoputfactory

1.解析读取users.xml

@Test
 public void test1() throws Exception 
{
  //获取redaer对象用于解析xml文件
  XMLInputFactory xif = XMLInputFactory.newInstance();
  XMLStreamReader reader = xif.createXMLStreamReader(new FileReader( "./files/users.xml"));
  //对于reader来说,与sax解析的方式一样,用int的方式来判断是否有元素的某个标记
  int type = reader.next();//读取xml中的第一个节点
  
  while(type!=XMLStreamReader.END_DOCUMENT){//判断不是文件的最后
   //可以再次的对type做一个判断
   if(type==XMLStreamReader.START_ELEMENT){
    //获取元素的名称
    String qName = reader.getLocalName();
    //判断是否是user节点
    if(qName.equals("user")){
     //获取属性
     String id = reader.getAttributeValue(0);
     System.err.println(id);
    }else if(qName.equals("name")){
     String name = reader.getElementText();//获取当前元素的子元素,子元素=文本元素
     System.err.println(name);
    }else if(qName.equals("age")){
     String age = reader.getElementText();//获取当前元素的子元素,子元素=文本元素
     System.err.println(age);
    }
   }
   //必须要向下再移动一次
   type=reader.next();
  }
 }
}

    以下代码相同,只是while内的条件不一样,上面的是reader.next() 在最后必须向下移动一次

@Test
 public void test2() throws Exception 
{
  System.err.println("第二种方式");
  XMLInputFactory xif = XMLInputFactory.newInstance();
  XMLStreamReader reader = xif.createXMLStreamReader(new FileReader("./files/users.xml"));
  
  while(reader.hasNext()){//判断还有下一个元素
   int type = reader.next();
   if(type==XMLStreamReader.START_ELEMENT){
    String qName = reader.getLocalName();
    if(qName.equals("user")){
     //获取属性
     String id = reader.getAttributeValue(0);
     System.err.println(id);
    }else if(qName.equals("name")){
     String name = reader.getElementText();//获取当前元素的子元素,子元素=文本元素
     System.err.println(name);
    }else if(qName.equals("age")){
     String age = reader.getElementText();//获取当前元素的子元素,子元素=文本元素
     System.err.println(age);
    }
   }
  }
 }

2.封装成List<User>

@Test
 public void test2() throws Exception {
  List<User> list = new ArrayList<User>();
  
  XMLInputFactory xif = XMLInputFactory.newInstance();
  XMLStreamReader reader = xif.createXMLStreamReader(new FileReader( "./files/users.xml"));
  
  User user = null;
  
  while(reader.hasNext()){//判断还有下一个元素
   int type = reader.next();
   if(type==XMLStreamReader.START_ELEMENT){
    String qName = reader.getLocalName();
    if(qName.equals("user")){
     //获取属性
     String id = reader.getAttributeValue(0);
         user=new User();
         user.setId(id);
    }else if(qName.equals("name")){
     String name = reader.getElementText();//获取当前元素的子元素,子元素=文本元素
     user.setName(name);
    }else if(qName.equals("age")){
     String age = reader.getElementText();//获取当前元素的子元素,子元素=文本元素
     user.setAge(Integer.valueOf(age));
    }
   }else if(type==XMLStreamReader.END_ELEMENT){
    String qName = reader.getLocalName();
    if(qName.equals("user")){
     list.add(user);
    }
   }
  }
  System.err.println("封装的结果为:"+users);
 }

3.生成一个新的xml文件-——XMLStreamWriter - 用于生成xml文件

 @Test
 public void test3() throws Exception {
  // 生成一个新的xml文件
  XMLOutputFactory out = XMLOutputFactory.newInstance();
  XMLStreamWriter writer = out.createXMLStreamWriter(new FileOutputStream("./files/a.xml"));
  //写xml的头<?xml v e ?>
  writer.writeStartDocument("UTF-8","1.0");
  writer.writeStartElement("users");
  writer.writeStartElement("user");
  writer.writeAttribute("id", "UU001");
  
  writer.writeStartElement("name");
  writer.writeCharacters("张三李四");
  writer.writeEndElement();
  
  writer.writeStartElement("age");
  writer.writeCharacters("99");
  writer.writeEndElement();
  
  writer.writeEndElement();
  
  writer.writeEndElement();
  
  writer.writeEndDocument();
  
 }


© 著作权归作者所有

共有 人打赏支持
H
粉丝 0
博文 21
码字总数 6313
作品 0
济南
完整理解XML领域(耗费心血,欢迎纠错)

每个人都知道什么是XML,也知道它的格式.如果深入点理解如何使用XML,可能就不是每个人都知道的了. XML是一种自描述性文档,它的作用是内容的承载,和展示没有任何关系.所以,如何将XML里的数据以...

xpbug
2013/01/24
0
11
4个Java的常用工具,了解一下吧!

在现如今的互联网时代里,Java无疑是一种极为流行的开发语言,无论是程序界还是整个互联网行业势必带来很大的影响。不管是人才需求还是薪资水平上,Java的发展前景都是很乐观的。 关于Java的...

梦想远方_8e96
06/15
0
0
Exception in thread "main" org.xmlpull.v1.XmlPullP

[xmlpull]XmlPull常见错误 编写者 日期 关键词 郑昀@ultrapower 2005-9-28 Xmlpull kxml java Xmlpull官方站点:http://www.xmlpull.org/ 优点:不必等整个文档解析完成,部分求值结果早就可...

Java编程思想
2014/04/15
0
0
Hibernate Validator 6.0.11.Final 发布,支持 JDK 11

Hibernate Validator 6.0.11.Final 已发布,建议 6.x 版本的用户尽快升级,它是 6.0.10.Final 的直接替换版本,改进了与 JDK 11 的兼容性以及一些 Bug 修正。 What’s new 支持 JDK 11 由于 ...

王练
07/20
0
0
Android 创建与解析XML(一)—— 概述

Android 是最常用的智能手机平台,XML 是数据交换的标准媒介,Android 中可以使用标准的XML生成器、解析器、转换器 API,对 XML 进行解析和转换。 XML,相关有DOM、SAX、JDOM、DOM4J、Xerce...

长平狐
2013/01/06
149
0

没有更多内容

加载失败,请刷新页面

加载更多

WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
49分钟前
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
11
1
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0
谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linux-tao
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部