安卓解析XML文件系列3:使用DOM方式
来源:互联网 发布:如何买域名和空间视频 编辑:程序博客网 时间:2024/05/16 07:46
安卓中解析XML文件的方式有三种,下面将第三种方式的使用方法介绍给大家。
DOM是一种用于XML文档对象模型,可用于直接访问XML文档的各个部件,DOM中文档被模拟成树状,其中XML语法的每一个组成部分都表示一个节点,DOM允许用户遍历文档树,从父节点移动到子节点和兄弟节点。并利用某节点类型特有的属性(元素具有属性,文本节点具有文本数据)
节点(XML文档中的每一个成分都是一个节点)
DOM是这样规定的:
整个文档是一个节点文档
每一个XML标签是一个元素节点
包含在XML元素中的文本是文本节点
每一个XML属性是一个属性节点
在子节点比较多的时候,使用效率比较低,需要进行多次循环遍历来取出节点进行解析。
从内存占用率来说:SAX和PULL是比DOM占用更少内存的解析方式,更适合Android手机开发。
这个例子实现的是使用DOM方式解析XML文件,将web上一个xml文件解析出语义。
整体思路:新建一个java工程,定义一个实体类Book,在里面定义它的字段、get和set方法、toString方法。定义一个HttpUtils类,在里面定义getXML方法,在这个方法中使用字符串类型的网址实例化HttpURLConnection对象,设置它的超时时间、input方式、请求方式、获取返回码,如果请求完成,则以输入流的形式返回结果的信息。定义一个DomService类,在里面定义getBooks方法,在这个方法中定义一个List对象,创建一个document解析的工厂,创建一个DocumentBuilder对象,把输入流放入DocumentBuilder对象并返回给Document对象,获得稳定的元素节点,对book节点进行遍历,获取id,获取里面的子节点,对里面的子节点进行遍历,如果是name节点的话,获取它的值,并赋值给Book对象的name属性,如果是price节点的话,获取它的值,并赋值给Book对象的price属性,把book对象加入到List对象中,返回List对象。定义一个Test类,定义一个xml文件所在的字符串类型网址,以这个网址为参数调用getXML方法·,返回一个InputStream对象,以InputStream对象为参数调用getBooks方法,返回一个List对象,遍历List对象并将里面的内容信息输出。
Book.java文件:
public class Book { private int id; private String name; private float price; public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;} @Overridepublic String toString() {return "Book [id=" + id + ", name=" + name + ", price=" + price + "]";}public Book() {// TODO Auto-generated constructor stub}}HttpUtils.java文件:
public class HttpUtils {//从服务器获取xml文件返回流public HttpUtils() {// TODO Auto-generated constructor stub}public static InputStream getXML(String path){InputStream inputStream=null;try {URL url=new URL(path);if(url!=null){HttpURLConnection connection=(HttpURLConnection)url.openConnection();connection.setConnectTimeout(3000);connection.setDoInput(true);connection.setRequestMethod("GET");int code=connection.getResponseCode();if(code==200){inputStream=connection.getInputStream();}}} catch (Exception e) {// TODO: handle exception}return inputStream;}}
DomService.java文件:
public class DomService {public DomService() {// TODO Auto-generated constructor stub}public List<Book> getBooks(InputStream inputStream) throws Exception{List<Book> list=new ArrayList<Book>();//创建一个document解析的工厂DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuilder();//document表示整个文本的对象Document document=builder.parse(inputStream);//有时报错是因为同名的包引用错了org.w3c.dom.Element element=document.getDocumentElement();//获得稳定的元素节点NodeList bookNodes=element.getElementsByTagName("book");//从这个节点开始遍历for(int i=0;i<bookNodes.getLength();i++){org.w3c.dom.Element bookElement=(org.w3c.dom.Element)bookNodes.item(i);Book book=new Book();book.setId(Integer.parseInt(bookElement.getAttribute("id")));NodeList childNodes=bookElement.getChildNodes();for(int j=0;j<childNodes.getLength();j++){if(childNodes.item(j).getNodeType()==Node.ELEMENT_NODE){if("name".equals(childNodes.item(j).getNodeName())){book.setName(childNodes.item(j).getFirstChild().getNodeValue());}else if("price".equals(childNodes.item(j).getNodeName())){book.setPrice(Float.parseFloat(childNodes.item(j).getFirstChild().getNodeValue()));}}}list.add(book);}return list;}}
Test.java文件:
public class Test {public Test() {// TODO Auto-generated constructor stub}public static void main(String[] args) {// TODO Auto-generated method stubString path="http://pc-20150724xmdx:8080/myhttp/book.xml";//这是这个电脑web项目通用的网址(不用考虑ip地址)InputStream inputStream=HttpUtils.getXML(path);//让客户端来访问服务器端DomService service=new DomService();try {List<Book> list=service.getBooks(inputStream);for (Book book : list) {System.out.println(book.toString());}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
book.xml文件:
<books> <book id="12"> <name>thinking in java</name> <price>85.5</price> </book> <book id="15"> <name>Spring in Action</name> <price>39.0</price> </book></books>
- 安卓解析XML文件系列3:使用DOM方式
- 安卓解析XML文件系列1:使用SAX方式
- 安卓解析XML文件系列2:使用PULL方式
- 安卓使用DOM,SAX,PULL解析xml,安卓写入xml文件
- DOM方式解析XML文件
- 使用DOM方式解析XML
- Java使用Dom方式解析xml文件Demo
- xml文件--DOM方式解析xml
- 安卓使用sax、dom、pull解析xml
- 使用DOM解析XML文件
- 使用Dom解析xml文件
- 使用DOM解析XML文件
- 使用dom解析xml文件
- 使用Dom解析XML文件
- 使用DOM解析XML文件
- 使用DOM解析XML文件
- 使用DOM解析XML文件
- 使用DOM解析XML文件
- hist的使用
- 使用命令窗口(cmd)向数据库中写入数据
- 在 iOS 中获取唯一标识符的几种方案
- 向ActionBar中添加自定义的View
- LeetCode 题解(266) : Inorder Successor in BST
- 安卓解析XML文件系列3:使用DOM方式
- ECS 服务器CentOS系统如何开放端口
- ssh集成
- 自增符号++(自减符号--)带来的部分影响
- 在ListView中嵌套ListView的事件处理
- 【经典算法】: 罗马数字
- BZOJ 4292 PA2015 Równanie 枚举
- C语言连接Mysql数据库
- iOS开发有关导航条坐标问题