核心技術篇:3.android網絡編程之dom解析xml

android網絡編程之dom解析xmljava

  DOM(Document Object Model)是一種用於解析xml文檔的對象模型。在DOM中,文檔被模擬爲樹狀,其中XML文檔的每一個組成部分都被視爲一個節點。一般DOM比SAX更容易掌握,由於它沒有涉及回調及複雜的狀態管理;然而,DOM的實現經常將全部XML節點保存在內存中,在必定程度上影響執行效率。android

  DOM是這樣規定的:編程

    *整個文檔是一個文檔節點網絡

    *每一個XML標籤是一個元素節點dom

    *包含在XML元素中的文本是文本節點ui

    *每一個XML屬性是一個屬性節點this

    *註釋屬於註釋節點spa

 

    #Node:DOM的基本數據類型xml

    #Element:用戶最主要處理的對象是Element對象

    #Attr:元素的屬性

    #Text:一個Element或attr的實際內容

    #Document:表明整個XML文檔

 

    ¥在節點樹中,頂端的節點稱爲根節點

    ¥根節點以外的每一個節點都有一個父節點

    ¥節點能夠有任何數量的子節點

    ¥葉子是沒有子節點的節點

    ¥同級節點是擁有相同父節點的節點

  下面來看一下一個實例:

  

public class DomParse {

		public ArrayList<Person> getPersons(InputStream inputStream) throws Exception{
		ArrayList<Person> list = new ArrayList<Person>();
		//獲得DOM解析器的工廠實例
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		//從DOM工廠中得到DOM解析器
		DocumentBuilder builder = factory.newDocumentBuilder();
		//把要解析的xml文檔讀入DOM解析器  
		Document document = builder.parse(inputStream);
		//元素類,得到根元素
		Element element = document.getDocumentElement();
		//獲得文檔名稱爲person的元素的節點列集合
		NodeList bookNodes = element.getElementsByTagName("person");
		//遍歷該集合,讀取集合中的元素及其子元素的名字
		for(int i=0;i<bookNodes.getLength();i++){
			Element bookElement = (Element) bookNodes.item(i);
			Person person = new Person();
			person.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())){
							person.setName(childNodes.item(j).getFirstChild().getNodeValue());
					}else if("age".equals(childNodes.item(j).getNodeName())){
							person.setAge(Integer.parseInt(childNodes.item(j).getFirstChild().getNodeValue()));
					}
				}
			}//end for j
			list.add(person);
		}//end for i
		return list;
	}
}

 

   關鍵代碼爲DomParse類,關鍵步驟爲:

    1.獲得DOM解析器的工廠實例-->DocumentBuilderFactory.newInstance();

    2.從DOM工廠中得到DOM解析器-->factory.newDocumentBuilder();

    3.把要解析的xml文檔讀入DOM解析器-->builder.parse(inputStream);

    4.得到根元素-->document.getDocumentElement();    

    5.獲得文檔名稱爲person的元素的節點列集合-->element.getElementsByTagName("person");

    6.遍歷該集合,讀取集合中的元素及其子元素的名字-->(Element) bookNodes.item(i);

  調用代碼很簡單:

      InputStream is= MainActivity.this.getResources().getAssets().open("xmltest.xml");//將XML文檔轉換爲輸入流
      DomParse domParseXml=new DomParse();
     persons=domParseXml.getPersons(is);
相關文章
相關標籤/搜索