Java讀取XML檔案之SAX篇

來源:互聯網
上載者:User

       在XMLReader接受XML文檔,並對讀入的xml檔案進行解析,解析開始之前,需要向XMLReader註冊一個ContentHandler,也就是相當於一個事件監聽器,在ContentHandler中定義了很多方法,當XMLReader讀到合適的內容,就會拋出相應的事件,並把這個事件的處理權代理給ContentHandler,調用其相應的方法進行響應。

ContentHandler是一個介面,當處理特定的XML檔案的時候,需要為其建立實現了此介面的類來處理特定的事件。而org.xml.sax.helpers.DefaultHandler類實現了此介面,所以我們只要繼承DefaultHandler,並覆蓋其中的方法即可。具體常用的幾個方法在下面程式中有詳細注釋:

package xml;

import java.io.FileReader;
import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;;

public class SaxTest extends DefaultHandler{

 public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
  
  XMLReader xr=XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
  xr.setContentHandler(new SaxTest());
  xr.parse(new InputSource(new FileReader("test.xml")));
 }

//在文檔開始的時候調用此方法
 public void startDocument() throws SAXException {
  
  System.out.println("startDocument: ");
 
 }
 //在文檔結束的時候調用此方法
 public void endDocument() throws SAXException {
  
  System.out.println("enddocument: ");
 }

//在遇到開始標籤時調用此方法,

//其中參數中的namespaceURI就是名域,localName是標籤名,qName是標籤的修飾首碼,當沒有使用名域的時候,這兩個參數都未null。而atts是這個標籤所包含的屬性列表。通過atts,可以得到所有的屬性名稱和相應的值

 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
  
  System.out.println("startElement: "+localName);

 }

//遇到結束標籤時調用此方法

 public void endElement(String uri, String localName, String qName) throws SAXException {
  
  System.out.println("endElement: "+localName);
 }

//當遇到標籤中的字串時,調用這個方法,它的參數是一個字元數組,以及讀到的這個字串在這個數組中的起始位置和長度

 public void characters(char[] ch, int start, int length) throws SAXException {
  
  String data=new String(ch,start,length);
  System.out.println(data);
 
 }
}

當我們建立如下test.xml檔案時

test.xml

-------------------

<?xml version="1.0"?>
<School>
 <Student>
  <ID>123456</ID>
  <Address>408</Address>
  <Name>wxm</Name>
  <Sex>male</Sex>
 </Student>
</School>

-------------------

運行程式,輸出結果如下:

startDocument:
startElement: School

 
startElement: Student

  
startElement: ID
123456
endElement: ID

  
startElement: Address
408
endElement: Address

  
startElement: Name
wxm
endElement: Name

  
startElement: Sex
male
endElement: Sex

 
endElement: Student

endElement: School
enddocument:

----------------

END!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.