1. 概述
平常我们一般是使用JSON与服务器做数据通信,JSON的话,直接用GSON或者其他库去解析很简单。但是,其他有些服务器会返回XML格式的文件,这时候就需要去读取XML文件了。
XML的解析有三种方式,在Android中提供了三种解析XML的方式OM(Document Objrect Model),SAX(Simple API XML),以及Android推荐的Pull解析方式,他们也各有弊端,而这里来看看使用DOM的方式。
2. Dom解析
DOM解析器在解析XML文档时,会把文档中的所有元素,按照其出现的层次关系,解析成一个个Node对象(节点)。再形象点,就是一棵树,多节点的树,称为Dom树。
Node对象提供了一系列常量来代表结点的类型,当开发人员获得某个Node类型后,就可以把Node节点转换成相应节点对象(Node的子类对象),以便于调用其特有的方法。
Node对象提供了相应的方法去获得它的父结点或子结点。编程人员通过这些方法就可以读取整个XML文档的内容、或添加、修改、删除XML文档的内容.
3. Dom解析代码示例
代码如下:
/**
* DOM解析
* 把文档中的所有元素,按照其出现的层次关系,解析成一个个Node对象(节点)。
* 缺点是消耗大量的内存。
* @param xmlFilePath 文件
* @return Document
*/
public static Document loadWithDom(String xmlFilePath) {
try {
File file = new File(xmlFilePath);
if (!file.exists()) {
throw new RuntimeException("not find file:" + xmlFilePath);
}
else {
InputStream inputStream = new FileInputStream(file);
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(inputStream);
try {
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return document;
}
} catch (ParserConfigurationException | IOException | SAXException e) {
return null;
}
}
上面的方法是同步的,最终返回的是一个 Document 对象。 |