一、理论准备

               

二、上代码 

<?xml version="1.0" encoding="utf-8" ?>
 <persons>
 <person id="23">
  <name>Jack</name>
  <age>21</age>
  </person>
 <person id="20">
  <name>Dick</name>
  <age>23</age>
  </person>
  </persons>

package cn.bgxt.service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;


import cn.bgxt.domain.Person;

public class DomService {

    public DomService() {
        // TODO Auto-generated constructor stub
    }

    public static List<Person> getPersons(InputStream inputStream) throws Exception
    {
        List<Person> list=new ArrayList<Person>();
        //获取工厂对象,以及通过DOM工厂对象获取DOMBuilder对象
        DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
        DocumentBuilder builder=factory.newDocumentBuilder();
        //解析XML输入流,得到Document对象,表示一个XML文档
        Document document=builder.parse(inputStream);
        //获得文档中的次以及节点,persons
        Element element=document.getDocumentElement();
        // 获取Element下一级的person节点集合,以NodeList的形式存放。
        NodeList personNodes=element.getElementsByTagName("person");
        for(int i=0;i<personNodes.getLength();i++)
        {
            //循环获取索引为i的person节点
            Element personElement=(Element) personNodes.item(i);
            Person person=new Person();
            //通过属性名,获取节点的属性id
            person.setId(Integer.parseInt(personElement.getAttribute("id")));
            //获取索引i的person节点下的子节点集合
            NodeList childNodes=personElement.getChildNodes();
            for(int j=0;j<childNodes.getLength();j++)
            {
                //循环遍历每个person下的子节点,如果判断节点类型是ELEMENT_NODE,就可以依据节点名称给予解析
                if(childNodes.item(j).getNodeType()==Node.ELEMENT_NODE)
                {
                    if("name".equals(childNodes.item(j).getNodeName()))
                    {
                        //因为文本也是一个文本节点,
                        //所以这里读取到name节点的时候,
                        //通过getFirstChild()可以直接获得name节点的下的第一个节点,就是name节点后的文本节点
                        //取其value值,就是文本的内容
                        person.setName(childNodes.item(j).getFirstChild().getNodeValue());
                    }
                    else if("age".equals(childNodes.item(j).getNodeName()))
                    {
                        person.setAge(Integer.parseInt(childNodes.item(j).getFirstChild().getNodeValue()));
                    }
                }
            }
            //把解析的person对象加入的list集合中
            list.add(person);
        }
        return list;
    }
}

三、遗留问题

解析xml必须事先知道xml的结构么?不知道不行么?

四、参考文献

                    http://www.cnblogs.com/plokmju/p/android_DOMforXML.html

Android使用Dom解析xml的更多相关文章

  1. Android之DOM解析XML

    一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...

  2. Android DOM解析XML方法及优化

    在Android应用开发中,我们常常要在应用启动后从服务器下载一些配置文件,这些配置文件包含一些项目中可能用到的资源,这些文件很多情况下是XML文件,这时就要将XML下载到文件中保存,之后再解析XML ...

  3. Android之Pull解析XML

    一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...

  4. Java从零开始学四十二(DOM解析XML)

    一.DOM解析XML xml文件 favorite.xml <?xml version="1.0" encoding="UTF-8" standalone ...

  5. Android几种解析XML方式的比较

    https://blog.csdn.net/isee361820238/article/details/52371342 一.使用SAX解析XML SAX(Simple API for XML) 使用 ...

  6. Dom 解析XML

    xml文件 <?xml version="1.0" encoding="UTF-8"?><data>    <book id=&q ...

  7. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  8. 简单谈谈dom解析xml和html

    前言 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.html,xml都是基于这个模型构造的.这也是一个W3C推出的标准.j ...

  9. xml语法、DTD约束xml、Schema约束xml、DOM解析xml

    今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...

随机推荐

  1. Linux查看磁盘块大小

    首先,使用df命令查看所在磁盘 df -hT 显示: Filesystem Type Size Used Avail Use% Mounted on /dev/vda1 ext4 15G .1G 12 ...

  2. apache性能配置优化

    最近在进行apache性能优化设置.在修改apache配置文件之前需要备份原有的配置文件夹conf,这是网站架设的好习惯.以下的apache配置调优均是在red had的环境下进行的. httpd相关 ...

  3. ASP.NET MVC Identity 添加角色

    using Microsoft.AspNet.Identity; public ActionResult AddRole(String name){ using (var roleManager = ...

  4. python中关于正则表达式一

    ab+,描述一个'a'和任意个'b',那么'ab','abb','abbbbb' 正则表达式可以:1.验证字符串是否符合指定特征,比如验证是否是合法的邮件地址 2.用来查找字符串,从一个长的文本中查找 ...

  5. 冒泡排序算法(C#实现)

    简单的冒泡排序算法,代码如下: ] = temp; hasExchangeAction =true; //发生过互换 } } if (!hasExchangeAction) //如果没有发生过互换,则 ...

  6. 搭建showslow:前端性能跑分及优化工具

    综述:showslow是一个开源的工具,集成并通过Yahoo yslow.google page speed.dynaTrace AJAX等工具监测网站各项性能指标,然后通过图表和排名展示出来. 1. ...

  7. selenium IDE处理各种窗口问题解决方法

    一.处理模态窗口:showModalDialog 由于弹出模态窗口后,就无法定位到当前窗口的元素和模态窗口的元素,需要添加js解决 模态窗口动作类似下面语句: <input id="c ...

  8. CocoaPods安装过程中的大坑

    一.CocoaPods是什么? CocoaPods是一个用Ruby写的.负责管理iOS项目中第三方开源库的工具,CocoaPods能让我们集中的.统一管理第三方开源库,为我们节省设置和更新第三方开源库 ...

  9. 是么是 API 和 SDK

    API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码 ...

  10. java 环境变量配置

    1.我的电脑 2.属性 3.高级 4.环境变量 5.新建 6.JAVA_HOME: C:\Program Files (x86)\Java 7.CLASSPATH: .;%JAVA_HOME%\;%J ...