DOM(Document Object Model,文档对象模型),Android 完全支持DOM 解析,利用DOM 中的对象,可以对XML 文档进行读取、搜索、修改、添加和删除等操作。
使用DOM 对XML 文件进行操作时,首先要解析文件,将文件分为独立的元素、属性和注释等,然后以节点树的形式在内存中对XML 文件进行表示,就可以通过节点树访问文档的内容,并根据需要修改文档——这就是DOM的工作原理。DOM 实现时首先为XML 文档的解析定义一组接口,解析器读入整个文档,然后构造一个驻留内存的树结构,这样代码就可以使用DOM接口来操作整个树结构。
(元素具有属性,文本节点具有文本数据)
节点 (XML 文档中的每一个成分都是一个节点)。
DOM 语法规定:
整个文档是一个节点文档。
每一个XML标签是一个元素节点。
包含在XML元素中的文本是文本节点。
每一个XML属性是一个属性节点。
实例:
解析过程:book.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="12">
<name>Think in java</name>
<price>85.5</price>
</book>
<book id="15" >
<name>Spring in Action</name>
<price>39.2</price>
</book>
</books>
创建一个Book 类,元素包括 (id, name , price)并实现set 与get 与tostring 方法。
创建业务类实现解析 DomService.java
public class DomService {
public DomService() {
}
public List <Book> getBoks ( InputStream inputStream) throws Exception{
List <Book> list =new ArrayList<>();
// 创建一个DOM解析的工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder= factory.newDocumentBuilder();
Document document = builder.parse(inputStream);
// 获得文档的元素节点
Element element = document.getDocumentElement();//
// 解析该元素的节点
NodeList bookNodes =element.getElementsByTagName("book");
for (int i = 0 ; i<bookNodes.getLength();i++){
// 取出节点中的每一个元素
Element bookElement = (Element) bookNodes.item(i);
Book book = new Book ();
book.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())){
book.setName(childNodes.item(j).getFirstChild().getNodeValue());
}
else if("price".equals(childNodes.item(j).getNodeName())){
book.setPrice(Float.parseFloat(childNodes.item(j).getFirstChild().getNodeValue()));
}
}
}
list.add(book);
}
return list;
}
public static void main(String[] args) {
String path = "http://localhost:8080/HelloServlet/book.xml";
InputStream inputStream = HttpUtils.getXML(path);
DomService domService = new DomService();
try {
List <Book > list=domService.getBoks(inputStream);
for (Book book :list ){
System.out.println(book.toString());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3:工具类从服务器获取数据xml文件
public class HttpUtils {
public HttpUtils() {
}
public static InputStream getXML(String path){
InputStream inputStream = null;
try {
URL url = new URL (path);
if (url!= null){
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection .setConnectTimeout(3000);
connection.setDoOutput(true);
connection.setRequestMethod("GET");
int code = connection.getResponseCode();
if (code==200){
inputStream =connection.getInputStream();
}
}
}catch (Exception e){
}
return inputStream;
}
}