文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

谷歌 Fuchsia 上手体验,将取代Android/win10

在手机市场领域,Google表现很抢眼,毫无疑问,Android 至今在移动操作系统的市场份额占据绝对领先地位,但是 Android 仍然存在不少问题,碎片化问题严重,在平板以及大屏幕设备上表现糟糕,...

linux-tao
23分钟前
1
0
List、Array与ArrayList

数组在内存中是连续存储的,所以它的索引速度很快,而且赋值和修改元素也非常快,比如: string[] s=new string[3];//赋值 s[0]="a"; s[1]="b"; s[2]="c";//修改 s[1]="b1"; 但是数组...

shimmerkaiye
25分钟前
0
0
Linux 的Lnmp环境下为mysql添加环境变量

一.问题 在Linux 安装完Lnmp 环境后 , 连接Mysql 告诉没有这条命令 mysql -uroot -p 命令失效 因为是源码安装的,所以会出现这样的的原因 。集成环境是不会出现的。 其实很简单,只需要给m...

15834278076
27分钟前
3
0
apolloxlua include函数

include函数不是单独使用的函数, 他并不是标准库的一部分, 你可以使用include函数将某个后缀为 .aop的文档包含到你的文档流中。 因为include是单独处理流, 所以不会在主处理流程中有所表示...

钟元OSS
31分钟前
0
0
【转载分享】做一名较真的工程师

近些年与我共事过的同事,一定知道我至今仍有一个较真的性格。我会:指出同事所写代码的不当命名问题(并帮助改进);指出同事所写文档中的逻辑混乱问题(并辅以修订);指出同事所写PPT中乱...

HellerZhang
32分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部