|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface XMLReader
用於使用回調讀取 XML 文檔的介面。
此模組(包括源程式碼和文檔)在公共域中,同時 沒有擔保。有關更多資訊,請參閱 http://www.saxproject.org。
註:不管其名稱如何,此介面不 擴展標準的 Java Reader
介面,因為讀取 XML 是一個與讀取字元資料完全不同的活動。
XMLReader 是 XML 解析器的 SAX2 驅動程序必須實作的介面。此介面允許應用程序設置和查詢解析器中的功能和屬性,註冊文檔處理的事件處理程序,以及開始文檔解析。
所有的 SAX 介面都假定為是同步的:必須在完成分解後返回 parse
方法,並且閱讀器必須等待事件處理程序回調返回後才能報告下一個事件。
此介面取代了(現在不推薦) SAX 1.0 Parser
介面。與舊的解析器介面(和某些監控器介面)相比,XMLReader 介面具有兩大重要增強:
存在將 SAX1 解析器轉換為 SAX2 XMLReader 的適配器並且反之亦然。
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)
設置屬性的值。 |
方法詳細資訊 |
---|
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。
SAXNotRecognizedException
- 如果功能值不能分派或檢索。
SAXNotSupportedException
- 當 XMLReader 能夠識別功能名稱但此時卻無法確定其值時。setFeature(java.lang.String, boolean)
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)
Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
屬性名稱是任何完全限定 URI。XMLReader 可以識別屬性名稱,但暫時不能返回其值。有些屬性值僅在特定的上下文中可用,例如在解析之前、期間或之後。
不要求 XMLReaders 能夠識別任何特定的屬性名稱,但要記錄 SAX2 的初始核心集。
使用在其自己的 URI 上建構的名稱,實作可以隨意(並且推薦)設計其自己的屬性。
name
- 屬性名稱,它是一個完全限定 URI。
SAXNotRecognizedException
- 如果屬性值不能分派或檢索。
SAXNotSupportedException
- 當 XMLReader 能夠識別屬性名稱但此時卻不能確定其值時。setProperty(java.lang.String, java.lang.Object)
void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException
屬性名稱是任何完全限定 URI。XMLReader 可以識別屬性名稱,但卻不能改變當前值。有些屬性值僅在特定的上下文中不可改變或可以改變,例如在解析之前、期間或之後。
不要求 XMLReaders 知道設置任何特定的屬性名稱,儘管 SAX2 定義了核心集。
此方法還是用於設置擴展的處理程序的標準機制。
name
- 屬性名稱,它是一個完全限定 URI。value
- 請求的屬性值。
SAXNotRecognizedException
- 如果屬性值不能分派或檢索。
SAXNotSupportedException
- 當 XMLReader 能夠識別屬性名稱但卻不能設置請求的值時。void setEntityResolver(EntityResolver resolver)
如果應用程序不註冊實體解析器,則 XMLReader 將執行其自己預設的解析。
應用程序還可以在解析期間註冊新的或不同的解析器,並且 SAX 解析器必須立即開始使用新的解析器。
resolver
- 實體解析器。getEntityResolver()
EntityResolver getEntityResolver()
setEntityResolver(org.xml.sax.EntityResolver)
void setDTDHandler(DTDHandler handler)
如果應用程序不註冊 DTD 處理程序,則將默默地忽略由 SAX 解析器報告的所有 DTD 事件。
應用程序還可以在解析期間註冊新的或不同的處理程序,並且 SAX 解析器必須立即開始使用新的處理程序。
handler
- DTD 處理程序。getDTDHandler()
DTDHandler getDTDHandler()
setDTDHandler(org.xml.sax.DTDHandler)
void setContentHandler(ContentHandler handler)
如果應用程序不註冊內容處理程序,則將默默地忽略由 SAX 解析器報告的所有內容事件。
應用程序還可以在解析期間註冊新的或不同的處理程序,並且 SAX 解析器必須立即開始使用新的處理程序。
handler
- 內容處理程序。getContentHandler()
ContentHandler getContentHandler()
setContentHandler(org.xml.sax.ContentHandler)
void setErrorHandler(ErrorHandler handler)
如果應用程序不註冊錯誤處理程序,則將默默地忽略由 SAX 解析器報告的所有錯誤事件;但是不能繼續進行常規處理。強烈建議所有的 SAX 應用程序實作錯誤處理程序,以避免出現不可預料的故障。
應用程序還可以在解析期間註冊新的或不同的處理程序,並且 SAX 解析器必須立即開始使用新的處理程序。
handler
- 錯誤處理程序。getErrorHandler()
ErrorHandler getErrorHandler()
setErrorHandler(org.xml.sax.ErrorHandler)
void parse(InputSource input) throws IOException, SAXException
應用程序可以使用此方法指導 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)
void parse(String systemId) throws IOException, SAXException
此方法是從系統標識符讀取文檔這一常見情形的捷徑。它完全等效於以下方法:
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。