文档章节

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

H
 HoneyHoney
发布于 2015/06/13 14:06
字数 607
阅读 13
收藏 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();
  
 }


© 著作权归作者所有

共有 人打赏支持
上一篇: XML--dom4j解析
下一篇: XML--Jaxp-sax解析
H
粉丝 0
博文 21
码字总数 6313
作品 0
济南
私信 提问
Android 创建与解析XML(一)—— 概述

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

长平狐
2013/01/06
159
0
完整理解XML领域(耗费心血,欢迎纠错)

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

xpbug
2013/01/24
0
11
用 StAX API 以 Streaming 的方式处理大的 ATOM data Feed

随着 Web2.0 的概念和应用深入人心,Feed 这种内容聚合格式受到了很大的青睐。Feed除了作为内容聚合格式,越来越多的程序用Feed来作为真实数据的容器。本文利用StAX API 本身具有的低内存消耗...

小编辑
2010/01/29
685
0
Apache Xerces-J 2.10.0 发布

Xerces是由Apache组织所推动的一项XML文档解析开源项目,它目前有多种语言版本包括JAVA、C++、PERL、COM等。而 Xerces-J 则是 Java 的版本。 该版本改进内容: Added experimental support f...

红薯
2010/06/19
624
0
关于 Java 常用工具您不知道的 5 件事

1. StAX 在千禧年左右,当 XML 第一次出现在很多 Java 开发人员面前时,有两种基本的解析 XML 文件的方法。SAX 解析器实际是由程序员对事件调用一系列回调方法的大型状态机。DOM 解析器将整个...

鉴客
2010/10/21
840
5

没有更多内容

加载失败,请刷新页面

加载更多

sql 开窗函数

开窗函数:在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成。为了解决这些问题,在 2003 年 ISO SQL 标准加入了开窗函数,开窗函数...

hblt-j
11分钟前
0
0
使用Vue动态生成form表单的实例代码

具有数据收集、校验和提交功能的表单生成器,包含复选框、单选框、输入框、下拉选择框等元素以及,省市区三级联动,时间选择,日期选择,颜色选择,文件/图片上传功能,支持事件扩展。 欢迎大家s...

嫣然丫丫丫
18分钟前
0
0
NEO区块链-DAPP开发直通车-第零篇

什么是DAPP DAPP 是以太坊发明的词汇 Decentralized Application. 目前基于区块链技术开发的应用程序广泛的接受使用了这一名称。 NEL将为开发DAPP提供全面的服务 什么是NEL NEL是 “NewEcon...

NEO-FANS
22分钟前
1
0
可视化软件VisIt在Ubuntu18.04上的安装

可视化软件VisIt在Ubuntu18.04上的安装 参考文档及使用说明 1.下载 在官网下载页面下载合适版本的安装文件,Ubuntu有专用的 https://wci.llnl.gov/simulation/computer-codes/visit/executa...

佚文
28分钟前
1
0
selenium之表格的定位

真的勇士, 敢于直面惨淡的warning、 敢于正视淋漓的error 目录 被测试网页的HTML代码 1.遍历表格所有单元格 2.定位表格中的某个元素 3.定位表格中的子元素 总结 浏览器网页常常会包含各类表...

程序猿拿Q
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部