核心技术篇:3.android网络编程之dom解析xml
2014-12-10 16:38
405 查看
android网络编程之dom解析xml
DOM(Document Object Model)是一种用于解析xml文档的对象模型。在DOM中,文档被模拟为树状,其中XML文档的每个组成部分都被视为一个节点。通常DOM比SAX更容易掌握,因为它没有涉及回调及复杂的状态管理;然而,DOM的实现常常将所有XML节点保存在内存中,在一定程度上影响执行效率。
![](http://images.cnitblog.com/blog/612741/201412/101539438377597.x-png)
DOM是这样规定的:
*整个文档是一个文档节点
*每个XML标签是一个元素节点
*包含在XML元素中的文本是文本节点
*每个XML属性是一个属性节点
*注释属于注释节点
#Node:DOM的基本数据类型
#Element:用户最主要处理的对象是Element
#Attr:元素的属性
#Text:一个Element或attr的实际内容
#Document:代表整个XML文档
¥在节点树中,顶端的节点称为根节点
¥根节点之外的每个节点都有一个父节点
¥节点可以有任何数量的子节点
¥叶子是没有子节点的节点
¥同级节点是拥有相同父节点的节点
下面来看一下一个实例:
关键代码为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);
调用代码很简单:
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);
相关文章推荐
- 核心技术篇:5.android网络编程之pull解析xml
- 核心技术篇:6.android网络编程之json解析
- 网络编程之android后台取服务器端xml解析之dom解析
- 核心技术篇:4.android网络通信之sax解析xml
- Android网络编程-----从服务器端获取xml数据并解析
- :Android网络编程--XML之解析方式:SAX
- android DOM 解析 网络上xml文档
- Android 通过Dom, Sax, Pull解析网络xml数据
- android之网络编程解析XML
- Android网络编程之sax解析xml
- Android 网络编程之 XML 和 JSON 解析
- Android-DOM、SAX、PULL解析网络xml
- Android网络编程之二:DOM解析XML文件
- Android编程解析XML方法详解(SAX,DOM与PULL)
- Android网络编程之三:XmlPullParser解析Xml文件
- Android网络编程之pull解析xml
- 【Android网络开发の1】XML之DOM方式 解析和生成XML文件 推荐
- 详解Android解析Xml的三种方式——DOM、SAX以及XMLpull
- Android 开发之路十---------SAX,DOM,PULL解析XML
- android中使用SAX, DOM, 或者pull 来解析XML文档