標籤:android 對象
1、DOM解析簡介 DOM解析會將XML檔案的內容,以對象樹的形式存放在記憶體中。DOM解析採用了對象樹這種形式儲存,使它易於遍曆,方便的知道上下層節點的情況,這是DOM解析與SAX解析最大的不同之處。SAX解析只能夠知道自己節點的情況,無法得知其它節點的資訊。
2、DOM解析常用方法(1)Document.getDocumentElement():返迴文檔的根項目
(2)Node.getPreviousSibling()、Node.getNextSibling():返回上一個或者下一個同胞元素
(3)Node.getFirstChild()、Node.getLastChild():返回給定節點的第一個子節點或者最後一個節點
(4)Node.getAttribute(attrName):擷取指定屬性的對象
3、DOM解析思路(1)不用說,第一步還是建立一個儲存XML檔案讀取資訊的實體物件
(2)建立一個DocumentBuilderFactory對象,根據它得到DocumentBuilder對象
(3)DocumentBuilder執行個體調用parse方法,傳遞的參數是讀取的檔案流對象
(4)根據節點名稱、屬性值等資訊遍曆XML檔案,儲存起來
4、舉例說明4.1 建立實體:
public class Person {private Integer id;private String name;private Short age;public Person(){}public Person(Integer id, String name, Short age) {this.id = id;this.name = name;this.age = age;}// 省略setter()和getter()方法}
4.2 解析類:
public static List<Person> getPersons(InputStream inStream) throws Exception{List<Person> persons = new ArrayList<Person>();DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.parse(inStream);Element root = document.getDocumentElement();NodeList personNodes = root.getElementsByTagName("person");for(int i=0; i < personNodes.getLength() ; i++){Element personElement = (Element)personNodes.item(i);int id = new Integer(personElement.getAttribute("id"));Person person = new Person();person.setId(id);NodeList childNodes = personElement.getChildNodes();for(int y=0; y < childNodes.getLength() ; y++){if(childNodes.item(y).getNodeType()==Node.ELEMENT_NODE){if("name".equals(childNodes.item(y).getNodeName())){String name = childNodes.item(y).getFirstChild().getNodeValue();person.setName(name);}else if("age".equals(childNodes.item(y).getNodeName())){String age = childNodes.item(y).getFirstChild().getNodeValue();person.setAge(new Short(age));}}}persons.add(person);}inStream.close();return persons;}
5、對比SAX解析(1)SAX的事件驅動是回調相應的方法,需要提供回調的方法。
(2)DOM解析中是一種樹形的結構,節點與節點之間都有這等級關係,我們簡單的給出一個圖示如下:
我們對比看看的xml檔案的內容與解析出來的樹形結構圖:
Android中的DOM解析方式