JavaTM 2 Platform
Standard Ed. 6

org.w3c.dom.ls
介面 LSParser


public interface LSParser

可以建構的物件介面,或者參數、來自各種輸入源的 DOM 階層樹。

LSParser 提供了用於解析 XML 和建構相應的 DOM 文檔結構的 API。LSParser 實例可以通過調用 DOMImplementationLS.createLSParser() 方法獲取。

如 [DOM Level 3 Core] 中指定的那樣,當通過 LSParser 第一次使文檔可供使用時:

期望非同步 LSParser 物件也實作 events::EventTarget 介面,以便事件偵聽器能夠在非同步 LSParser 物件上註冊。

非同步 LSParser 物件所支持的事件包括:

load
LSParser 完成對文檔的載入。另請參見 LSLoadEvent 介面的定義。
progress
在解析資料時 LSParser 通知進度情況。此規範並不嘗試精確定義應該何時排程進度事件。而是有意讓其具有實作依賴性。下面是一個應用程序如何排程進度事件的範例:一旦解析器開始接收資料,則將排程進度事件,以表示解析已開始。從這時起,為接收和處理的每 4096 個位元組資料排程進度事件。但這只是一個範例,實作可以在解析期間的任何時間選擇排程進度事件,或者根本不排程這些事件。另請參見 LSProgressEvent 介面的定義。

註:此規範中定義的所有事件都使用名稱空間 URI "http://www.w3.org/2002/DOMLS"

在解析輸入源時,通過錯誤處理程序(LSParser.domConfig 的 "error-handler" 參數)將錯誤報告給應用程序。此規範決不嘗試定義解析 XML 或者其他任何標記時所有可能發生的錯誤,但對一些常見的錯誤情形做了定義。此規範定義的錯誤和警告型別 (DOMError.type) 套件括:

"check-character-normalization-failure" [error]
如果參數 "check-character-normalization" 設置為 true 並且碰到標準化檢查失敗的字元串,則將引發此錯誤。
"doctype-not-allowed" [fatal]
如果配置參數 "disallow-doctype" 設置為 true 並且遇到了 doctype,則將引發此錯誤。
"no-input-specified" [fatal]
當載入文檔並且未在 LSInput 物件中指定輸入時引發此錯誤。
"pi-base-uri-not-preserved" [warning]
如果在不能保留處理指令的基 URI 位置遇到處理指令,則引發此警告。將引發此警告的一種情況範例是:配置參數 "entities" 被設置為 false 並且將解析下面的 XML 檔案:
 <!DOCTYPE root [ <!ENTITY e SYSTEM 'subdir/myentity.ent' ]> 
 <root> &e; </root>
subdir/myentity.ent 套件括:
<one> <two/> </one> <?pi 3.14159?> 
 <more/>
"unbound-prefix-in-entity" [warning]
這是一個獨立於實作的警告,如果配置參數 "namespaces" 設置為 true 並且在實體的替換文本中碰到了未綁定的名稱空間前綴時,可以引發此警告。並非強制引發此警告,因為有些現有的解析器不能在實體的替換文本中識別未綁定的名稱空間前綴。
"unknown-character-denormalization" [fatal]
如果配置參數 "ignore-unknown-character-denormalizations" 設置為 false 並且遇到了處理器無法為其確定標準化屬性的字元,則引發此錯誤。
"unsupported-encoding" [fatal]
如果遇到了不支持的編碼,則引發此錯誤。
"unsupported-media-type" [fatal]
如果配置參數 "supported-media-types-only" 設置為 true 並且遇到了不支持的媒體型別,則引發此錯誤。

除了引發定義的錯誤和警告之外,期望實作應該對其他任何錯誤和警告情況,例如 IO 錯誤(未找到檔案,權限被拒絕)、XML 格式良好性錯誤等引發特定於實作的錯誤和警告。

另請參見《Document Object Model (DOM) Level 3 Load and Save Specification》。


欄位摘要
static short ACTION_APPEND_AS_CHILDREN
          將解析操作的結果追加為上下文節點的子節點。
static short ACTION_INSERT_AFTER
          把解析操作的結果作為上下文節點的直接後續兄弟節點插入。
static short ACTION_INSERT_BEFORE
          把解析操作的結果作為上下文節點的直接前置兄弟節點插入。
static short ACTION_REPLACE
          用解析操作的結果替換上下文節點。
static short ACTION_REPLACE_CHILDREN
          用解析操作的結果替換上下文節點的所有子節點。
 
方法摘要
 void abort()
          中斷對當前由 LSParser 載入的文檔的載入。
 boolean getAsync()
          如果 LSParser 是非同步的,為 true,如果它是同步的,則為 false
 boolean getBusy()
          如果 LSParser 當前正忙於載入文檔,則為 true,否則為 false
 DOMConfiguration getDomConfig()
          解析輸入源時使用的 DOMConfiguration 物件。
 LSParserFilter getFilter()
          當提供過濾器時,實作將在建構 DOM 階層樹結構時調出該過濾器。
 Document parse(LSInput input)
          從通過 LSInput 標識的資源中解析 XML 文檔。
 Document parseURI(String uri)
          從 URI 參考 [IETF RFC 2396] 標識的位置解析 XML 文檔。
 Node parseWithContext(LSInput input, Node contextArg, short action)
          從通過 LSInput 標識的資源中解析 XML 片段,並將其內容插入到用 contextaction 參數指定的位置的現有文檔。
 void setFilter(LSParserFilter filter)
          當提供過濾器時,實作將在建構 DOM 階層樹結構時調出該過濾器。
 

欄位詳細資訊

ACTION_APPEND_AS_CHILDREN

static final short ACTION_APPEND_AS_CHILDREN
將解析操作的結果追加為上下文節點的子節點。為了使此動作起作用,上下文節點必須是 ElementDocumentFragment

另請參見:
常數欄位值

ACTION_REPLACE_CHILDREN

static final short ACTION_REPLACE_CHILDREN
用解析操作的結果替換上下文節點的所有子節點。為了使此動作有效,上下文節點必須是 ElementDocumentDocumentFragment

另請參見:
常數欄位值

ACTION_INSERT_BEFORE

static final short ACTION_INSERT_BEFORE
把解析操作的結果作為上下文節點的直接前置兄弟節點插入。為了使此操作有效,上下文節點的父節點必須是 ElementDocumentFragment

另請參見:
常數欄位值

ACTION_INSERT_AFTER

static final short ACTION_INSERT_AFTER
把解析操作的結果作為上下文節點的直接後續兄弟節點插入。為了使此操作有效,上下文節點的父節點必須是 ElementDocumentFragment

另請參見:
常數欄位值

ACTION_REPLACE

static final short ACTION_REPLACE
用解析操作的結果替換上下文節點。為了使此操作有效,上下文節點必須具有父節點,並且父節點必須是 ElementDocumentFragment

另請參見:
常數欄位值
方法詳細資訊

getDomConfig

DOMConfiguration getDomConfig()
解析輸入源時使用的 DOMConfiguration 物件。此 DOMConfiguration 特定於解析操作。在由解析操作創建或使用的 Document 上,沒有參數值從此 DOMConfiguration 物件被自動傳遞到 DOMConfiguration 物件。DOM 應用程序負責將任何所需的參數值從此 DOMConfiguration 物件傳遞到由 Document 物件參考的 DOMConfiguration 物件。
除在 "DOMConfiguration" 介面(在 [DOM Level 3 Core] 中定義)上識別的參數之外,針對 LSParserDOMConfiguration 物件還可以添加或修改以下參數:
"charset-overrides-xml-encoding"
true
[可選](預設)如果高層協議(如 HTTP)[IETF RFC 2616] 提供了對正被處理的輸入串流的字元編碼的指示,則將覆寫在 XML 宣告或 Text 宣告中指定的任何編碼(另請參見 [XML 1.0] 中的 4.3.3 節 "Character Encoding in Entities")。顯式在 LSInput 中設置編碼將覆寫協議中的任何編碼。
false
[必需] 解析器將忽略高層協議的任何字元集編碼資訊。
"disallow-doctype"
true
[可選] 如果在解析文檔時出現了 doctype 節點,則將拋出嚴重的 "doctype-not-allowed" 錯誤。這在處理諸如 SOAP 信封之類別的不允許有 doctype 節點的文檔時非常有用。
false
[必需](預設)允許文檔中的 doctype 節點。
"ignore-unknown-character-denormalizations"
true
[必需](預設)如果在檢驗完全標準化時 [XML 1.1] 受支持,處理器遇到不能為其確定標準化屬性的字元時,則處理器將忽略由這些字元導致的任何反向標準化。[XML 1.0]將忽略此參數。
false
[可選] 如果遇到了處理器不能確定其標準化屬性的字元,則報告嚴重的 "unknown-character-denormalization" 錯誤。
"infoset"
關於此參數的描述請參見 DOMConfiguration 的定義。與在 [DOM Level 3 Core] 中不同,對於 LSParser,此參數將預設為 true
"namespaces"
true
[必需](預設)執行在 [XML Namespaces] 和 [XML Namespaces 1.1] 中定義的名稱空間處理。
false
[可選] 不執行名稱空間處理。
"resource-resolver"
[必需] 對 LSResourceResolver 物件的參考,或為 null。如果遇到外部資源(如外部 XML 實體或 XML 網要位置)時此參數的值不為 null,則實作將請求在此參數中參考的 LSResourceResolver 解析該資源。
"supported-media-types-only"
true
[可選] 檢查被解析資源的媒體型別是否為被支持的媒體型別。如果遇到了不支持的媒體型別,則將引發型別 "unsupported-media-type" 的嚴重錯誤。必須總是接受在 [IETF RFC 3023] 中定義的媒體型別。
false
[必需](預設)接受任何媒體型別。
"validate"
關於此參數的描述請參見 DOMConfiguration 的定義。與在 [DOM Level 3 Core] 中不同,總是要完成對內部子集的處理,即使此參數設置為 false
"validate-if-schema"
關於此參數的描述請參見 DOMConfiguration 的定義。與在 [DOM Level 3 Core] 中不同,總是要完成對內部子集的處理,即使此參數設置為 false
"well-formed"
關於此參數的描述請參見 DOMConfiguration 的定義。與在 [DOM Level 3 Core] 中不同,不能將此參數設置為 false


getFilter

LSParserFilter getFilter()
當提供過濾器時,實作將在建構 DOM 階層樹結構時調出該過濾器。過濾器可以選擇從正在建構的文檔中刪除一些元素,或提前終止解析。
過濾器將在應用了 DOMConfiguration 參數請求的操作後調用。例如,如果 "validate" 設置為 true,則在調用過濾器前進行驗證。


setFilter

void setFilter(LSParserFilter filter)
當提供過濾器時,實作將在建構 DOM 階層樹結構時調出該過濾器。過濾器可以選擇從建構的文檔中刪除一些元素,或提前終止解析。
過濾器將在使用了 DOMConfiguration 參數請求的操作後調用。例如,如果 "validate" 設置為 true,則在調用過濾器前進行驗證。


getAsync

boolean getAsync()
如果 LSParser 是非同步的,為 true,如果它是同步的,則為 false


getBusy

boolean getBusy()
如果 LSParser 當前正忙於載入文檔,則為 true,否則為 false


parse

Document parse(LSInput input)
               throws DOMException,
                      LSException
從通過 LSInput 標識的資源中解析 XML 文檔。

參數:
input - 從其中讀取文檔的源的 LSInput
返回:
如果 LSParser 是同步 LSParser,則將返回新創建並填充的 Document。如果 LSParser 是非同步的,則返回 null,因為當此方法返回時,還不能建構該文檔物件。
拋出:
DOMException - INVALID_STATE_ERR:如果 LSParserLSParser.busy 屬性為 true,則引發此異常。
LSException - PARSE_ERR:如果 LSParser 無法載入 XML 文檔,則引發此異常。如果 DOM 應用程序想獲得關於錯誤的詳細資訊,則它必須附加一個使用參數 "error-handler" 的 DOMErrorHandler

parseURI

Document parseURI(String uri)
                  throws DOMException,
                         LSException
從 URI 參考 [IETF RFC 2396] 標識的位置解析 XML 文檔。如果 URI 套件括片段標識符(參見 [IETF RFC 2396] 中的 4.1 節),則該行為不是由此規範定義的,此規範的未來版本可能會定義該行為。

參數:
uri - 將讀取的 XML 文檔的位置。
返回:
如果 LSParser 是同步 LSParser,則將返回新創建並已填充的 Document,如果發生錯誤,則返回 null。如果 LSParser 是非同步的,則返回 null,因為當此方法返回時,還不可以建構該文檔物件。
拋出:
DOMException - INVALID_STATE_ERR:如果 LSParser.busy 屬性為 true,則將引發此異常。
LSException - PARSE_ERR:如果 LSParser 無法載入 XML 文檔,則將引發此異常。如果 DOM 應用程序想獲得關於錯誤的詳細資訊,則它必須附加一個使用參數 "error-handler" 的 DOMErrorHandler

parseWithContext

Node parseWithContext(LSInput input,
                      Node contextArg,
                      short action)
                      throws DOMException,
                             LSException
從通過 LSInput 標識的資源中解析 XML 片段,並將其內容插入到用 contextaction 參數指定的位置的現有文檔。當解析輸入串流時,上下文節點(或其父節點,取決於在哪裡將結果插入)用於解析未綁定的名稱空間前綴。上下文節點的 ownerDocument 節點(如果是型別 DOCUMENT_NODE 的節點,則為節點本身)用來解析預設屬性和實體參考。
因為新的資料插入到文檔,所以通過上下文節點的直接子節點或兄弟節點將觸發至少一個 mutation 事件。
如果上下文節點是 Document 節點並且動作是 ACTION_REPLACE_CHILDREN,則作為上下文節點傳遞的文檔將被更改,以便將其 xmlEncodingdocumentURIxmlVersioninputEncodingxmlStandalone 以及所有其他的此類別屬性都設置為它們將被設置的值(如果使用 LSParser.parse() 解析輸入源時)。
此方法始終是同步方法,即使 LSParser 是非同步時(LSParser.asynctrue)也是如此。
如果在解析過程中出現錯誤,則將通過與 DOMConfiguration 的 "error-handler" 參數相關聯的 ErrorHandler 實例通知調用者。
當調用 parseWithContext 時,將忽略以下配置參數的值,而是始終使用其預設值:""validate"、"validate-if-schema" 和 "element-content-whitespace"。將正常對待其他參數,期望解析器調用 LSParserFilter就像整個文檔被解析一樣。

參數:
input - 從中讀取源文檔的 LSInput。源文檔必須是 XML 片段,即除完整的 XML 文檔之外的任何文檔片段(除了上下文節點的型別為 DOCUMENT_NODE、操作為 ACTION_REPLACE_CHILDREN 的情況)、DOCTYPE(內部子集)、實體宣告、符號宣告、XML 或文本宣告。
contextArg - 用作正被解析的資料的上下文的節點。此節點必須是 Document 節點、DocumentFragment 節點或允許作為 Element 節點的子節點的型別的節點,例如它不能是 Attribute 節點。
action - 此參數描述了在新插入節點的集合與現有的上下文節點的子節點之間應該採取什麼動作。可能的動作集在上面的 ACTION_TYPES 中進行定義。
返回:
返回作為解析操作結果的節點。如果結果超過一個頂級節點,則返回第一個節點。
拋出:
DOMException - HIERARCHY_REQUEST_ERR:如果內容不能替換、插入到上下文節點的前面、後面或作為它的子節點(另請參見 [DOM Level 3 Core] 中的 Node.insertBeforeNode.replaceChild),則引發此異常。
NOT_SUPPORTED_ERR:如果 LSParser 不支持此方法,或者上下文節點是型別 Document,並且 DOM 實作不支持替換 DocumentType 子節點或 Element 子節點,則引發此異常。
NO_MODIFICATION_ALLOWED_ERR:如果上下文節點是只讀節點,並且將內容追加到了其子列表中,或者上下文節點的父節點是只讀節點並且將內容插入到了其子列表中,則將引發此異常。
INVALID_STATE_ERR:如果 LSParser.busy 屬性為 true,則將引發此異常。
LSException - PARSE_ERR:如果 LSParser 無法載入 XML 片段,則將引發此異常。如果 DOM 應用程序想獲得關於錯誤的詳細資訊,則它必須附加一個使用參數 "error-handler" 的 DOMErrorHandler

abort

void abort()
中斷對當前由 LSParser 載入的文檔的載入。如果當前 LSParser 不忙,則調用此方法無效。


JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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