JavaTM 2 Platform
Standard Ed. 6

org.xml.sax
介面 XMLReader

所有已知子介面:
XMLFilter
所有已知實作類別:
ParserAdapter, XMLFilterImpl

public interface XMLReader

用於使用回調讀取 XML 文檔的介面。

此模組(包括源程式碼和文檔)在公共域中,同時 沒有擔保有關更多資訊,請參閱 http://www.saxproject.org

註:不管其名稱如何,此介面 擴展標準的 Java Reader 介面,因為讀取 XML 是一個與讀取字元資料完全不同的活動。

XMLReader 是 XML 解析器的 SAX2 驅動程序必須實作的介面。此介面允許應用程序設置和查詢解析器中的功能和屬性,註冊文檔處理的事件處理程序,以及開始文檔解析。

所有的 SAX 介面都假定為是同步的:必須在完成分解後返回 parse 方法,並且閱讀器必須等待事件處理程序回調返回後才能報告下一個事件。

此介面取代了(現在不推薦) SAX 1.0 Parser 介面。與舊的解析器介面(和某些監控器介面)相比,XMLReader 介面具有兩大重要增強:

  1. 它增加了查詢和設置功能和屬性的標準方法;並且
  2. 增加了對名稱空間的支持,這是許多高層的 XML 標準所必需的。

存在將 SAX1 解析器轉換為 SAX2 XMLReader 的適配器並且反之亦然。

從以下版本開始:
SAX 2.0
另請參見:
XMLFilter, ParserAdapter, XMLReaderAdapter

方法摘要
 ContentHandler getContentHandler()
          返回當前的內容處理程序。
 DTDHandler getDTDHandler()
          返回當前的 DTD 處理程序。
 EntityResolver getEntityResolver()
          返回當前的實體解析器。
 ErrorHandler getErrorHandler()
          返回當前的錯誤處理程序。
 boolean getFeature(String name)
          尋找功能標誌的值。
 Object getProperty(String name)
          尋找屬性的值。
 void parse(InputSource input)
          解析 XML 文檔。
 void parse(String systemId)
          從系統標識符 (URI) 解析 XML 文檔。
 void setContentHandler(ContentHandler handler)
          允許應用程序註冊內容事件處理程序。
 void setDTDHandler(DTDHandler handler)
          允許應用程序註冊 DTD 事件處理程序。
 void setEntityResolver(EntityResolver resolver)
          允許應用程序註冊實體解析器。
 void setErrorHandler(ErrorHandler handler)
          允許應用程序註冊錯誤事件處理程序。
 void setFeature(String name, boolean value)
          設置功能標誌的值。
 void setProperty(String name, Object value)
          設置屬性的值。
 

方法詳細資訊

getFeature

boolean getFeature(String name)
                   throws SAXNotRecognizedException,
                          SAXNotSupportedException
尋找功能標誌的值。

功能名稱是任何完全限定 URI。XMLReader 識別功能名稱是可能的,但暫時不能返回它的值。有些功能值僅在特定的上下文中可用,例如在解析之前、期間或之後。另外,有些功能值不能以程式方式存取。(如果是用於 SAX1 Parser 的適配器,則將沒有獨立於實作的方法來公開基礎解析器是否在執行驗證,是否展開外部實體等。)

要求所有的 XMLReaders 都能識別 http://xml.org/sax/features/namespaces 和 http://xml.org/sax/features/namespace-prefixes 功能名稱。

典型用途如下:

 XMLReader r = new MySAXDriver();

                         // try to activate validation
 try {
   r.setFeature("http://xml.org/sax/features/validation", true);
 } catch (SAXException e) {
   System.err.println("Cannot activate validation."); 
 }

                         // register event handlers
 r.setContentHandler(new MyContentHandler());
 r.setErrorHandler(new MyErrorHandler());

                         // parse the first document
 try {
   r.parse("http://www.foo.com/mydoc.xml");
 } catch (IOException e) {
   System.err.println("I/O exception reading XML document");
 } catch (SAXException e) {
   System.err.println("XML exception reading document.");
 }
 

通過使用在其自己的 URI 上建構的名稱,實作可以隨意(建議)設計其自己的功能。

參數:
name - 功能名稱,它是一個完全限定 URI。
返回:
該功能的當前值(true 或 false)。
拋出:
SAXNotRecognizedException - 如果功能值不能分派或檢索。
SAXNotSupportedException - 當 XMLReader 能夠識別功能名稱但此時卻無法確定其值時。
另請參見:
setFeature(java.lang.String, boolean)

setFeature

void setFeature(String name,
                boolean value)
                throws SAXNotRecognizedException,
                       SAXNotSupportedException
設置功能標誌的值。

功能名稱是任何完全限定 URI。XMLReader 可以公開功能值,但卻無法改變當前值。有些功能值僅在特定的上下文中不可改變或可以改變,例如在解析之前、期間或之後。

要求所有的 XMLReaders 支持把 http://xml.org/sax/features/namespaces 設置為 true,把 http://xml.org/sax/features/namespace-prefixes 設置為 false。

參數:
name - 功能名稱,它是一個完全限定 URI。
value - 請求的功能值(true 或 false)。
拋出:
SAXNotRecognizedException - 如果功能值不能分派或檢索。
SAXNotSupportedException - 當 XMLReader 能夠識別功能名稱但不能設置請求的值時。
另請參見:
getFeature(java.lang.String)

getProperty

Object getProperty(String name)
                   throws SAXNotRecognizedException,
                          SAXNotSupportedException
尋找屬性的值。

屬性名稱是任何完全限定 URI。XMLReader 可以識別屬性名稱,但暫時不能返回其值。有些屬性值僅在特定的上下文中可用,例如在解析之前、期間或之後。

不要求 XMLReaders 能夠識別任何特定的屬性名稱,但要記錄 SAX2 的初始核心集。

使用在其自己的 URI 上建構的名稱,實作可以隨意(並且推薦)設計其自己的屬性。

參數:
name - 屬性名稱,它是一個完全限定 URI。
返回:
屬性的當前值。
拋出:
SAXNotRecognizedException - 如果屬性值不能分派或檢索。
SAXNotSupportedException - 當 XMLReader 能夠識別屬性名稱但此時卻不能確定其值時。
另請參見:
setProperty(java.lang.String, java.lang.Object)

setProperty

void setProperty(String name,
                 Object value)
                 throws SAXNotRecognizedException,
                        SAXNotSupportedException
設置屬性的值。

屬性名稱是任何完全限定 URI。XMLReader 可以識別屬性名稱,但卻不能改變當前值。有些屬性值僅在特定的上下文中不可改變或可以改變,例如在解析之前、期間或之後。

不要求 XMLReaders 知道設置任何特定的屬性名稱,儘管 SAX2 定義了核心集。

此方法還是用於設置擴展的處理程序的標準機制。

參數:
name - 屬性名稱,它是一個完全限定 URI。
value - 請求的屬性值。
拋出:
SAXNotRecognizedException - 如果屬性值不能分派或檢索。
SAXNotSupportedException - 當 XMLReader 能夠識別屬性名稱但卻不能設置請求的值時。

setEntityResolver

void setEntityResolver(EntityResolver resolver)
允許應用程序註冊實體解析器。

如果應用程序不註冊實體解析器,則 XMLReader 將執行其自己預設的解析。

應用程序還可以在解析期間註冊新的或不同的解析器,並且 SAX 解析器必須立即開始使用新的解析器。

參數:
resolver - 實體解析器。
另請參見:
getEntityResolver()

getEntityResolver

EntityResolver getEntityResolver()
返回當前的實體解析器。

返回:
當前的實體解析器,如果尚未註冊,則返回 null。
另請參見:
setEntityResolver(org.xml.sax.EntityResolver)

setDTDHandler

void setDTDHandler(DTDHandler handler)
允許應用程序註冊 DTD 事件處理程序。

如果應用程序不註冊 DTD 處理程序,則將默默地忽略由 SAX 解析器報告的所有 DTD 事件。

應用程序還可以在解析期間註冊新的或不同的處理程序,並且 SAX 解析器必須立即開始使用新的處理程序。

參數:
handler - DTD 處理程序。
另請參見:
getDTDHandler()

getDTDHandler

DTDHandler getDTDHandler()
返回當前的 DTD 處理程序。

返回:
當前的 DTD 處理程序,如果尚未註冊,則返回 null。
另請參見:
setDTDHandler(org.xml.sax.DTDHandler)

setContentHandler

void setContentHandler(ContentHandler handler)
允許應用程序註冊內容事件處理程序。

如果應用程序不註冊內容處理程序,則將默默地忽略由 SAX 解析器報告的所有內容事件。

應用程序還可以在解析期間註冊新的或不同的處理程序,並且 SAX 解析器必須立即開始使用新的處理程序。

參數:
handler - 內容處理程序。
另請參見:
getContentHandler()

getContentHandler

ContentHandler getContentHandler()
返回當前的內容處理程序。

返回:
當前的內容處理程序,如果尚未註冊,則返回 null。
另請參見:
setContentHandler(org.xml.sax.ContentHandler)

setErrorHandler

void setErrorHandler(ErrorHandler handler)
允許應用程序註冊錯誤事件處理程序。

如果應用程序不註冊錯誤處理程序,則將默默地忽略由 SAX 解析器報告的所有錯誤事件;但是不能繼續進行常規處理。強烈建議所有的 SAX 應用程序實作錯誤處理程序,以避免出現不可預料的故障。

應用程序還可以在解析期間註冊新的或不同的處理程序,並且 SAX 解析器必須立即開始使用新的處理程序。

參數:
handler - 錯誤處理程序。
另請參見:
getErrorHandler()

getErrorHandler

ErrorHandler getErrorHandler()
返回當前的錯誤處理程序。

返回:
當前的錯誤處理程序,如果尚未註冊,則返回 null。
另請參見:
setErrorHandler(org.xml.sax.ErrorHandler)

parse

void parse(InputSource input)
           throws IOException,
                  SAXException
解析 XML 文檔。

應用程序可以使用此方法指導 XML reader 開始解析來自任何有效輸入源(字元串流、位元組串流或 URI)的 XML 文檔。

在解析正在進行時,應用程序不能調用此方法(它們必須為每個巢狀的 XML 文檔創建新的 XMLReader)。一旦完成瞭解析,應用程序就可以重新使用同一個 XMLReader 物件(可能帶有不同的輸入源)。在完成解析之前對 XMLReader 物件的配置(例如為功能標記和屬性建立的處理程序綁定和值)是不可改變的,除非配置在此方面的定義顯式指定了其他行為。(例如,公開被解析的文檔的特徵的功能標記或屬性。)

在解析期間,XMLReader 通過已註冊的事件處理程序提供關於 XML 文檔的資訊。

此方法是同步的:它直到解析結束後才返回。如果客戶端應用程序希望提前終止解析,則它應該拋出一個異常。

參數:
input - XML 文檔的頂層的輸入源。
拋出:
SAXException - 任何 SAX 異常,可能包裹另外的異常。
IOException - 解析器發出的 IO 異常,可能來自應用程序提供的位元組串流或字元串流。
另請參見:
InputSource, parse(java.lang.String), setEntityResolver(org.xml.sax.EntityResolver), setDTDHandler(org.xml.sax.DTDHandler), setContentHandler(org.xml.sax.ContentHandler), setErrorHandler(org.xml.sax.ErrorHandler)

parse

void parse(String systemId)
           throws IOException,
                  SAXException
從系統標識符 (URI) 解析 XML 文檔。

此方法是從系統標識符讀取文檔這一常見情形的捷徑。它完全等效於以下方法:

 parse(new InputSource(systemId));
 

如果系統標識符是 URL,則在將它傳遞到解析器之前必須由應用程序對它進行完整的解析。

參數:
systemId - 系統標識符 (URI)。
拋出:
SAXException - 任何 SAX 異常,可能包裹另外的異常。
IOException - 解析器發出的 IO 異常,可能來自應用程序提供的位元組串流或字元串流。
另請參見:
parse(org.xml.sax.InputSource)

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only