?? 0803-0100.htm
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0071)http://162.105.170.55/ASPs/GetLearningArticleTemp.asp?section=0803-0100 -->
<HTML><HEAD><TITLE>XML中國論壇 - 初學進階 - 8.3.1 SAX分析器接口簡介</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TABLE {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"
}
.pt9 {
FONT-SIZE: 9pt; COLOR: black; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"
}
.pt10 {
FONT-WEIGHT: 700; FONT-SIZE: 10pt; LINE-HEIGHT: 18pt; FONT-FAMILY: "宋體"
}
.TempOutline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; COLOR: #666666; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.TempOutline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; COLOR: #666666; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.Outline {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.Outline1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.Outline11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage0 {
FONT-SIZE: 9pt; MARGIN-LEFT: 15pt; TEXT-INDENT: -28pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage1 {
FONT-SIZE: 9pt; MARGIN-LEFT: 24pt; TEXT-INDENT: -36pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage11 {
FONT-SIZE: 9pt; MARGIN-LEFT: 38pt; TEXT-INDENT: -50pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
.passage111 {
FONT-SIZE: 9pt; MARGIN-LEFT: 51pt; TEXT-INDENT: -64pt; LINE-HEIGHT: 15pt; FONT-FAMILY: "宋體"; TEXT-DECORATION: none
}
</STYLE>
<META content="Microsoft FrontPage 5.0" name=GENERATOR></HEAD>
<BODY vLink=#000000 aLink=#000000 link=#000000 leftMargin=0 topMargin=0
onload=""><!-- 以下為主體內容 -->
<div align="center">
<center>
<TABLE width="100%" border=0 style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0">
<TBODY>
<TR vAlign=top>
<TD width=43 rowSpan=2></TD>
<TD vAlign=center width="493">
<p align="center"><IMG height=33
src="image/title_learner.gif" width=226></TD>
<TD width=50 rowSpan=2></TD>
</TR>
<TR vAlign=top>
<TD width="493"><!-- 正文內容 -->
<DIV class=pt10><B>8.3.1 SAX分析器接口簡介</B></DIV>
<DIV></DIV><BR>
<DIV class=pt9>
<P>由前面介紹可知,SAX是一種事件驅動的接口,它的基本原理是由接口的用戶提供符合定義的處理器,XML分析時遇到特定的事件,就去調用處理器中特定事件的處理函數。一般SAX接口都是用JAVA實現的,但事實上C++也可以用于實現SAX接口,只是C++的分析器比較少。之所以叫做"簡單"應用程序接口,是因為這個接口確實非常簡單,絕大多數事情分析器都沒有做,需要應用程序自己去實現,因而開發者的任務也相應重一些。</P>
<P>SAX分析器的大體構成框架如圖所示:</P>
<P align=center><IMG height=294
alt="TU000000-0803-0100-01.gif (12065 bytes)"
src="image/TU000000-0803-0100-01.gif" width=240><FONT face=宋體
size=3></P></FONT>
<P>圖中最上方的SAXParserFactory用來生成一個分析器實例。XML文檔是從左側箭頭所示處讀入,當分析器對文檔進行分析時,就會觸發在DocumentHandler,ErrorHandler,DTDHandler以及EntityResolver接口中定義的回調方法。</P>
<P>下面我們就對SAX分析器中的幾個主要API接口作一簡單的介紹。
<UL>
<LI><STRONG>SAXParserFactory</STRONG> </LI></UL>
<P>SAXParserFactory對象用來按照系統屬性中的定義創建一個分析器的實例,接口是Javax.xml.parser.
SAXParserFactory。
<UL>
<LI><STRONG>Parser</STRONG> </LI></UL>
<P>org.xml.sax.Parser接口定義了類似setDocumentHandler的方法來創建事件處理函數。另外,該接口中還定義了parser(URL)方法來對XML文檔進行實際的分析工作。
<UL>
<LI><STRONG>DocumentHandler</STRONG> </LI></UL>
<P>當分析器遇到XML文檔中的標記時,就會激活該接口中的startDocument,endDocument,startElement以及endElement等方法。另外,characters方法以及processingInstruction方法也是在DocumentHandler接口中實現的。當分析器遇到元素內部的文本內容時就會激活characters方法,當分析器遇到處理指令時就會激活processingInstruction方法。
<UL>
<LI><STRONG>ErrorHandler</STRONG> </LI></UL>
<P>當分析器在分析過程中遇到不同的錯誤時,ErrorHandler接口中的error、fatalError或者warning方法就會被激活。
<UL>
<LI><STRONG>DTDHandler</STRONG> </LI></UL>
<P>當處理DTD中的定義時,就會調用該接口中的方法。
<UL>
<LI><STRONG>EntityResolver</STRONG> </LI></UL>
<P>當分析器要識別由URI定義的數據時,就會調用該接口中的resolveEntity方法。<BR><BR>一個典型的SAX應用程序至少要提供一個DocumentHandler接口。一個健壯的SAX應用程序還應該提供ErrorHandler接口。<BR></P></DIV>
<P></P>
<P></P></TD></TR></TBODY></TABLE>
</center>
</div>
<P></P>
<P>
<P></P></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -