zoukankan      html  css  js  c++  java
  • Android使用Dom解析xml

    一、理论准备

                    1

    二、上代码 

    <?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

  • 相关阅读:
    部门创建注意问题
    我的技术博客开通啦~
    听侯钟雷老师的讲座,确认了几个问题。
    Dynamics CRM 批量添加用户时,报错:Server was unable to process request.
    汉字的Unicode范围(转)
    转载:Apache1.1 post请求无body的bug
    转载:Android有效解决加载大图片时内存溢出的问题
    2.2之前的webkit crash问题
    转载:Expect:100Continue & HTTP 417 Expectation
    城市旅游问题
  • 原文地址:https://www.cnblogs.com/hxsyl/p/3651360.html
Copyright © 2011-2022 走看看