• 核心技术篇:3.android网络编程之dom解析xml


    android网络编程之dom解析xml

      DOM(Document Object Model)是一种用于解析xml文档的对象模型。在DOM中,文档被模拟为树状,其中XML文档的每个组成部分都被视为一个节点。通常DOM比SAX更容易掌握,因为它没有涉及回调及复杂的状态管理;然而,DOM的实现常常将所有XML节点保存在内存中,在一定程度上影响执行效率。

      DOM是这样规定的:

        *整个文档是一个文档节点

        *每个XML标签是一个元素节点

        *包含在XML元素中的文本是文本节点

        *每个XML属性是一个属性节点

        *注释属于注释节点

     

        #Node:DOM的基本数据类型

        #Element:用户最主要处理的对象是Element

        #Attr:元素的属性

        #Text:一个Element或attr的实际内容

        #Document:代表整个XML文档

     

        ¥在节点树中,顶端的节点称为根节点

        ¥根节点之外的每个节点都有一个父节点

        ¥节点可以有任何数量的子节点

        ¥叶子是没有子节点的节点

        ¥同级节点是拥有相同父节点的节点

      下面来看一下一个实例:

      

    public class DomParse {
    
    		public ArrayList<Person> getPersons(InputStream inputStream) throws Exception{
    		ArrayList<Person> list = new ArrayList<Person>();
    		//得到DOM解析器的工厂实例
    		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    		//从DOM工厂中获得DOM解析器
    		DocumentBuilder builder = factory.newDocumentBuilder();
    		//把要解析的xml文档读入DOM解析器  
    		Document document = builder.parse(inputStream);
    		//元素类,获得根元素
    		Element element = document.getDocumentElement();
    		//得到文档名称为person的元素的节点列集合
    		NodeList bookNodes = element.getElementsByTagName("person");
    		//遍历该集合,读取集合中的元素及其子元素的名字
    		for(int i=0;i<bookNodes.getLength();i++){
    			Element bookElement = (Element) bookNodes.item(i);
    			Person person = new Person();
    			person.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())){
    							person.setName(childNodes.item(j).getFirstChild().getNodeValue());
    					}else if("age".equals(childNodes.item(j).getNodeName())){
    							person.setAge(Integer.parseInt(childNodes.item(j).getFirstChild().getNodeValue()));
    					}
    				}
    			}//end for j
    			list.add(person);
    		}//end for i
    		return list;
    	}
    }
    

     

       关键代码为DomParse类,关键步骤为:

        1.得到DOM解析器的工厂实例-->DocumentBuilderFactory.newInstance();

        2.从DOM工厂中获得DOM解析器-->factory.newDocumentBuilder();

        3.把要解析的xml文档读入DOM解析器-->builder.parse(inputStream);

        4.获得根元素-->document.getDocumentElement();    

        5.得到文档名称为person的元素的节点列集合-->element.getElementsByTagName("person");

        6.遍历该集合,读取集合中的元素及其子元素的名字-->(Element) bookNodes.item(i);

      调用代码很简单:

          InputStream is= MainActivity.this.getResources().getAssets().open("xmltest.xml");//将XML文档转换为输入流
          DomParse domParseXml=new DomParse();
         persons=domParseXml.getPersons(is);
    

     

  • 相关阅读:
    关于litecoin莱特币挖矿、炒作的一点感想
    win7-opengl开发环境的搭建
    基本图形的光栅化算法
    问题:glGenBuffers()函数没有定义怎么办
    maya user guider第一课,一些基本概念
    第一课 opengl简介
    获取0点和24点时间戳的方式
    Yii2框架查询指定字段和获取添加数据的id
    yii2框架安装
    七牛存储图片代码
  • 原文地址:https://www.cnblogs.com/dream550/p/4155641.html
Copyright © 2020-2023  润新知