• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • XML學習筆記(一)之DOM及SAX方式解析XML原理

    1.XML

        XML 指可擴展標記語言(eXtensible Markup Language)。XML 被設計用來傳輸和存儲數據。

    (1)XML 文檔形成了一種樹結構,它從"根部"開始,然后擴展到"枝葉"。

       示例:  

    <bookstore>
        <book category="CHILDREN">
            <title lang="en">Harry Potter</title>
            <author>J K. Rowling</author>
            <year>2005</year>
            <price>29.99</price>
        </book>
    </bookstore>

       

       在程序中常要對XML增加、修改、刪除和檢索,這就需要對XML進行解析

    2.1  DOM解析

            DOM (文檔對象模型) 解析器讀入整個文檔,然后構建一個駐留內存的樹結構,然后通過節點以及節點之間的關系來解析xml文件,操作這個樹的結構。

    • 優點:整個文檔樹在內存中,便于操作,支持刪除、修改、重新排列等多種功能;
    • 缺點:將整個文檔調入內存(包括無用的節點),浪費時間和空間
    • 使用場合:一旦解析了文檔還需多次訪問這些數據,但硬件資源充足(內存、CPU).

     下面結合這個xml文件來進行dom解析。

    step1:先在d盤準備一個students.xml文檔

    <?xml version="1.0" encoding="UTF-8"?>
    <students>
        <student sn="01">
    	    <name>張三</name>
    		<age>18</age>
    	 </student>
    	 
    	 <student sn="02">
    	    <name>李四</name>
    		<age>54</age>
    	 </student>
    </students>

    step2:

    package com.dom;
    
    import java.io.File;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;
    import org.w3c.dom.Text;
    
    public class Demo05 {
    
    	public static void main(String[] args)throws Exception {
    		
    		    DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
    			DocumentBuilder db=dbf.newDocumentBuilder();
    			Document doc=db.parse(new File("d:\\students.xml"));
    			
    			//增加一個學生節點
    			Element student=doc.createElement("student");
    			student.setAttribute("sn", "03");
    			
    			Element name=doc.createElement("name");
    			Element age=doc.createElement("age");
    			Text nametxt=doc.createTextNode("小明");
    			Text agetxt=doc.createTextNode("25");
    			
    			name.appendChild(nametxt);
    			age.appendChild(agetxt);
    			
    			student.appendChild(name);
    			student.appendChild(age);
    			
    			doc.getDocumentElement().appendChild(student);
    		
    			//查找名為name的節點,并輸出它的節點值
    			NodeList names=doc.getElementsByTagName("name");
    			if(null!=names&&names.getLength()>0)
    			{
    				for(int i=0;i<names.getLength();i++)
    				{
    				Element element=(Element)names.item(i);
    				System.out.println(element.getFirstChild().getNodeValue());
    				}
    			}
    	}
    	
    
    }
    

    輸出結果:

    張三
    李四
    小明

    2.2  SAX解析

            SAX是一種基于事件驅動的API。利用SAX解析XML文檔,涉及到兩個部分,解析器事件處理器,解析器負責讀取XML文檔,并向事件處理器發送事件,如元素的開始和元素的結束事件,而事件處理器則負責對事件做出響應,對傳遞XML數據進行處理。

    • 優點:不用事先調入整個文檔,占用資源少,SAX解析器代碼比DOM解析器代碼小。
    • 缺點:
    1. 不是持久的,事件過后,若沒保存數據,那么數據就丟了;
    2.  無狀態性,只解析當前元素,無法訪問之前的內容
    3. 從事件中只能得到文本,但不知道該文本屬于哪個元素;
    • 使用場合:只需XML文檔的少量內容,很少回頭訪問;機器內存少;
    package com.xzy;
    
    import java.io.File;
    
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.SAXParseException;
    import org.xml.sax.helpers.DefaultHandler;
    
    public class Demo01 {
    
    	public static void main(String[] args) throws Exception
    	{
    		SAXParserFactory spf=SAXParserFactory.newInstance();
    		
    		SAXParser  parser=spf.newSAXParser();
    		File f=new File("d:\\students.xml");//要讀取的xml文檔
    		
    		parser.parse(f, new MyHandler());
    	}
    	//自定義事件處理器
        public static class MyHandler extends DefaultHandler
        {
    
    		@Override
    		public void startDocument() throws SAXException {
    		    System.out.println("開始解析文檔.......................................");
    		}
    
    		@Override
    		public void endDocument() throws SAXException {
    			 System.out.println("結束解析文檔.......................................");
    		}
    
    		@Override
    		public void endElement(String uri, String localName, String qName) throws SAXException {
    		    System.out.println("結束元素:"+qName);
    		}
    
    		@Override
    		public void characters(char[] ch, int start, int length) throws SAXException {
    			   System.out.println("文本:"+new String(ch,start,length));
    		}
    
    		@Override
    		public void error(SAXParseException e) throws SAXException {
    			 System.out.println("出錯了。。。。。。");
    		}
    
    		@Override
    		public void startElement(String uri, String localName, String qName, Attributes attributes)
    				throws SAXException {
    			   System.out.println("開始元素:"+qName);
    		}
        	
        }
    }
    

    輸出結果:

    開始解析文檔.......................................
    開始元素:students
    文本:
        
    開始元素:student
    文本:
    	    
    開始元素:name
    文本:張三
    結束元素:name
    文本:
    		
    開始元素:age
    文本:18
    結束元素:age
    文本:
    	 
    結束元素:student
    文本:
    	 
    	 
    開始元素:student
    文本:
    	    
    開始元素:name
    文本:李四
    結束元素:name
    文本:
    		
    開始元素:age
    文本:54
    結束元素:age
    文本:
    	 
    結束元素:student
    文本:
    
    結束元素:students
    結束解析文檔.......................................
    

     

    版權聲明:本文為qq_42922647原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_42922647/article/details/91887879

    智能推薦

    Android開發:XML簡介及DOM、SAX、PULL解析對比

    目錄 目錄 定義 XML(extensible Markup Language) ,是一種數據標記語言 & 傳輸格式 作用 對數據進行標記(結構化數據) 對數據進行存儲 對數據進行傳輸 與html的區別:html用于顯示信息;xml用于存儲&傳輸信息 XML特點 標簽可進行自定義 XML允許作者定義自己的標簽和文檔結構 自我描述性 XML文檔實例 僅僅是一個純文本,有文本處理能力的...

    xml文件--SAX方式解析xml文件

    SAX介紹   SAX的全稱是Simple APIs for XML,也即XML簡單應用程序接口。   與DOM不同,SAX提供的訪問模式是一種順序模式,這是一種快速讀寫XML數據的方式。   當使用SAX分析器對XML文檔進行分析時,會觸發一系列事件,并**相應的事件處理函數,應用程序通過這些事件處理函數實現對XML文檔的訪問,因而SAX接口也被稱作事件驅動接口。   局限性:   1. SAX...

    Android XML DOM解析SAX解析

    聲明:內容大部分參考自網友博客。個人只是做了小小的總結 我個人覺得可以用MVC模式去看待解析xml文件的實現: 下面是具體實現: 首先編寫一個xml的數據文件存放在res/raw文件目錄下: 1.編寫模型代碼: 2.視圖編輯: 3.控制器代碼: 下面是具體實現: 首先編寫一個xml的數據文件存放在res/raw文件目錄下: 1.編寫模型代碼: 2.視圖編輯: 3.控制器代碼:...

    XML解析(一),SAX解析XML

    轉載自  XML解析(一),SAX解析XML 一、概述  SAX,全稱Simple API for XML,是一種以事件驅動的XMl API,是XML解析的一種新的替代方法,解析XML常用的還有DOM解析,PULL解析(Android特有),SAX與DOM不同的是它邊掃描邊解析,自頂向下依次解析,由于邊掃描邊解析,所以它解析XML具有速度快,占用內存少的優點,對于An...

    java xml解析之SAX

    原理: SAX解析是讀到XML文檔的每一部分,就立刻進行解析。調用對應處理器的響應方法。...

    猜你喜歡

    Java中xml解析 SAX、PULL、DOM

    目錄   一,什么是XML: 二,XML的解析 一,什么是XML: 定義:XML指的是可擴展標記語言,主要用來傳輸和存儲數據。 XML主要語法規則: XML標簽需要用戶自定義 XML標簽使用時要關閉<標簽名> </標簽名>成對存在 XML標簽對區分大小寫 XML標簽必須正確的嵌套 XML文檔有且只有一個根元素 XML的屬性值要加引號 XML中的空格換行符等會被當做...

    XML解析___使用Dom or使用Sax

    xml解析方式分為兩種,dom和sax dom:(Document Object Model,即對文檔對象模型)是W3C組織推薦的處理XML的一種方式 Sax:(Simple API for  XML)不是官方標準,但它是xml社區事實上的標準,幾乎所有的xml解析器都支持它。   XML解析開發包 Jaxp、Jdom、dom4J   使用DOM解析XML介紹 DOM...

    XML之SAX解析XML實例

    --------------------------------------------XML之SAX解析XML------------------------------------------ 一,前言 SAX是針對DOM解析XML內存占用大,查找速度慢的缺點而出現的解決方案。SAX解析器對XML文檔解析會從XML文檔開始位置起進行解析,同時根據已經定義好的事件處理器,來解決當前所解析的部分(...

    虛擬機centos配置網絡,固定ip地址

    執行 ifconfig,查看網絡是沒有ip地址的 一、首先將虛擬機的網絡配置設置為橋接模式 二、查看虛擬網絡配置 三、進入到系統控制臺中 配置如圖所示:...

    中移OneNET 云平臺 >>> 一塊ESP8266 的WiFi 定位之旅

    前言 WiFi 定位功能是OneNET 繼基站定位之后最新推出的一項定位服務。(編稿時仍處于灰度測試階段) 然后我有幸參與了WiFi 定位功能的灰度測試,測試成功,在此記錄一下 開始 1)為設備開啟WiFi 定位功能 WiFi 定位功能門戶(編稿時處于半開放狀態,官網不能查詢到,直接點擊下方鏈接進入): https://open.iot.10086.cn/develop/lbs/#/wifi/wi...

    精品国产乱码久久久久久蜜桃不卡