DOM解析xml文件

DOM是w3c推荐的处理可扩展标记语言的标准接口,是Document Object Model 文件对象模型的缩写,可以跨平台,跨语言的访问和修改文档的内容和结构。

DOM是一种面向对象方式描述的文档模型,采用的树型存储结构。我们在解析过程中,是一次性的将整个文档装载入内存进行操作的。对于小型的文档这样的方式还可以,但对于比较大的文档,这个的解析方式就不咋适合了。

DOM的优势主要表现在:易用性强,使用DOM时,将把所有的XML文档信息都存于内存中,并且遍历简单,支持XPath,增强了易用性。
DOM的缺点主要表现在:效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用。另外效率低还表现在大量的消耗时间,因为使用DOM进行解析时,将为文档的每个element、attribute、processing-instrUCtion和comment都创建一个对象,这样在DOM机制中所运用的大量对象的创建和销毁无疑会影响其效率。
xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<people>
    <person id="001" >
       <name>XY1
        </name>
        <age>22
        </age>
    </person>
    <person id="002" >
        <name>XY2
        </name>
        <age>22
        </age>
    </person>
</people>
具体的解析过程:

private List<Person> list = null;
	private InputStream in = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		in = Thread.currentThread().getContextClassLoader()
				.getResourceAsStream("people.xml");
		// 获取DOM工厂
		DocumentBuilderFactory docBF = DocumentBuilderFactory.newInstance();
		try {
			// 初始化person集合
			list = new ArrayList<Person>();
			// 获取解析器
			DocumentBuilder docBuilder = docBF.newDocumentBuilder();
			// 传入xml文件
			Document doc = docBuilder.parse(in);
			// 获取节点
			Element element = doc.getDocumentElement();
			// 获取节点集合
			NodeList nList = element.getElementsByTagName("person");
			for (int i = 0; i < nList.getLength(); i++) {
				Element personEle = (Element) nList.item(i);
				Person person = new Person();
				// 设置id
				person.setId(Integer.parseInt(personEle.getAttribute("id")));
				NodeList chilNode = personEle.getChildNodes();
				for (int j = 0; j < chilNode.getLength(); j++) {
					if (chilNode.item(j).getNodeType() == Node.ELEMENT_NODE) {
						if ("name".equals(chilNode.item(j).getNodeName())) {
							person.setName(chilNode.item(j).getFirstChild()
									.getNodeValue());
						} else if ("age".equals(chilNode.item(j).getNodeName())) {
							person.setAge(chilNode.item(j).getFirstChild()
									.getNodeValue());
						}
					}
				}
				list.add(person);
			}
			Log.i("list", list.get(0).toString() + ";" + list.get(1).toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

可以看到解析的结果是:

DOM解析xml文件_第1张图片

我们在装载的时候,装载进入的是文件转换为的输入流。

当文件存放在sd卡上的时候,

我们就这样处理:

//获取sd卡的路径
			String path=Environment.getExternalStorageDirectory().getAbsolutePath()+"/people.xml";
			Log.i("paht", path);
			File file=new File(path);
			// 传入xml文件
			Document doc = docBuilder.parse(file);

这样得到的结果就是:

DOM解析xml文件_第2张图片

paht得到的是sd卡的路径。


你可能感兴趣的:(android,xml,dom,网络编程)