androidのDOM方式解析XML
来源:互联网 发布:淘宝链接怎么做的 编辑:程序博客网 时间:2024/06/05 14:56
androidのDOM方式解析XML
在Android中,常见的XML解析器分别为DOM解析器、SAX解析器和PULL解析器
第一种方式:DOM解析器:
DOM是基于树形结构的的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树、检索所需数据。分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息。Android完全支持DOM 解析。利用DOM中的对象,可以对XML文档进行读取、搜索、修改、添加和删除等操作。
DOM的工作原理:使用DOM对XML文件进行操作时,首先要解析文件,将文件分为独立的元素、属性和注释等,然后以节点树的形式在内存中对XML文件进行表示,就可以通过节点树访问文档的内容,并根据需要修改文档——这就是DOM的工作原理。
DOM实现时首先为XML文档的解析定义一组接口,解析器读入整个文档,然后构造一个驻留内存的树结构,这样代码就可以使用DOM接口来操作整个树结构。
由于DOM在内存中以树形结构存放,因此检索和更新效率会更高。但是对于特别大的文档,解析和加载整个文档将会很耗资源。 当然,如果XML文件的内容比较小,采用DOM是可行的。
常用的DoM接口和类:
Document:该接口定义分析并创建DOM文档的一系列方法,它是文档树的根,是操作DOM的基础。
Element:该接口继承Node接口,提供了获取、修改XML元素名字和属性的方法。
Node:该接口提供处理并获取节点和子节点值的方法。
NodeList:提供获得节点个数和当前节点的方法。这样就可以迭代地访问各个节点。
DOMParser:该类是Apache的Xerces中的DOM解析器类,可直接解析XML文件。
package com.wyl.example;import java.io.IOException;import java.io.InputStream;import java.util.List;import javax.xml.parsers.ParserConfigurationException;import org.xml.sax.SAXException;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class MainActivity extends Activity {private TextView mTvShow; private Button mBtnDom; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findView();setListener();}private void setListener() {mBtnDom.setOnClickListener(myListener);}private void findView() {mTvShow = (TextView) findViewById(R.id.textview);mBtnDom = (Button) findViewById(R.id.btnDom);}private OnClickListener myListener = new OnClickListener() {@Overridepublic void onClick(View v) {// 1. 获取当前工程下的people.xml文件流InputStream inputStream = MainActivity.class.getClassLoader().getResourceAsStream("people.xml");//定义Person对象List<Person> persons = null;mTvShow.setText("");switch (v.getId()) {case R.id.btnDom: //DOMmTvShow.setText("DOM:");try {//使用DOMPersonService解析xmlpersons = DOMPersonService.readXml(inputStream);} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}break;default:break;}//显示结果for (Person person : persons) {mTvShow.setText(mTvShow.getText().toString() + "\n" + person.toString());}}};}
package com.wyl.example;public class Person {private Integer id;private String name;private Short age;public Person() {super();}public Person(Integer id, String name, Short age) {this.id = id;this.name = name;this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Short getAge() {return age;}public void setAge(Short age) {this.age = age;}@Overridepublic String toString() {return "id = " + id + "name = " + name + "age = " + age;}}
package com.wyl.example;import java.io.IOException;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 org.xml.sax.SAXException;//dom解析xml类public class DOMPersonService {public static List<Person> readXml(InputStream inStream)throws ParserConfigurationException, SAXException, IOException {List<Person> persons = new ArrayList<Person>();// 实力化一个文档构建工厂DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();// 通过文档构建工厂构建文档构建器DocumentBuilder builder = factory.newDocumentBuilder();// 通过文档构建工厂构建文档实例Document document = builder.parse(inStream);// 得到文档根结点Element root = document.getDocumentElement();// 得到所有的person节点NodeList nodes = root.getElementsByTagName("person");// 循环判断每个节点的内容for (int i = 0; i < nodes.getLength(); i++) {// 得到节点对象Element personElement = (Element) nodes.item(i);// 定义person对象Person person = new Person();// 得到xml属性person.setId(Integer.valueOf(personElement.getAttribute("id")));// 得到xml子结点NodeList childNodes = personElement.getChildNodes();for (int j = 0; j < childNodes.getLength(); j++) {// 得到每个结点对象Node childNode = (Node) childNodes.item(j);// 如果当前节点为内容节点,取相应的内容if (childNode.getNodeType() == Node.ELEMENT_NODE) {Element childElement = (Element) childNode;if ("name".equals(childElement.getNodeName())) {person.setName(childElement.getFirstChild().getNodeValue());} else if ("age".equals(childElement.getNodeName())) {person.setAge(new Short(childElement.getFirstChild().getNodeValue()));}}}// 添加链表中persons.add(person);}return persons;}}
<?xml version="1.0" encoding="UTF-8"?><persons xmlns:pre="http://www.baidu.com"> <person id="001"> <name>coolszy</name> <age>22</age> </person> <person id="002"> <name>kuka</name> <age>23</age> </person> <person id="003"> <name>wyl</name> <age>30</age> </person> </persons>
注意:xml 文件放在src 目录下,不能放在package目录下这种使用
InputStream inputStream = MainActivity.class.getClassLoader().getResourceAsStream("people.xml");
Dom方式解析特点是一次性加载所有文件到内存中,然后根据DOM树方式进行解析,优点是解析速度快,缺点是比较耗费内存,不能中途停止。
0 0
- androidのDOM方式解析XML
- android dom 解析xml方式
- android XML解析之DOM解析方式
- Android DOM方式解析XML文件
- Android使用DOM方式解析XML
- dom方式解析xml
- DOM方式解析XML
- DOM方式解析xml
- Dom方式解析Xml
- DOM方式解析XML
- Android解析XML方式(三)使用DOM解析XML
- Android解析XML方式(三)使用DOM解析XML
- android解析xml文件的方式(其一DOM方式)
- android解析xml文件的方式之DOM解析
- Android--xml解析(Dom)
- Android--DOM解析XML
- Android DOM解析XML
- Android DOM解析XML
- 安装 PHP 5.4 成功 https://webtatic.com/packages/php54/
- 文章标题
- linux 内核开发环境搭建
- sigaction函数中 SA_NODEFER与sa_mask之间
- linux 常用指令
- androidのDOM方式解析XML
- 《Java并发编程实践》笔记6——并发性调优
- C++字符串操作集合
- 什么是Web缓存,为什么要使用它
- JAVA集合之——TreeSet
- BIN 转化为 S19 格式及 S19 格式解析
- CentOS 配置网络环境
- UNIX网络编程 卷2:进程间通信
- iOS代码文档化,比注释更高级!