public interface LSParser
LSParser
提供了一个用于解析XML和构建相应的DOM文档结构的API。 可以通过调用DOMImplementationLS.createLSParser()
方法获得一个LSParser
实例。
如[ DOM Level 3 Core ]中所述,当首先通过LSParser可以获得文档时:
Attr
节点的value
和nodeValue
属性最初返回XML 1.0 normalized value 。 然而,如果将参数“ validate-if-schema ”和“ datatype-normalization ”设置为true
,则根据所使用的属性标准化,属性值可能与通过XML 1.0属性归一化获得的属性值不同。 如果参数“ datatype-normalization ”设置为false
,所述XML 1.0属性标准化保证发生,并且如果所述属性列表中不包含的命名空间声明,则attributes
上属性Element
节点代表属性[属性]在[定义XML Information Set ]。 异步LSParser
对象预期也将实现events::EventTarget
接口,以便事件侦听器可以在异步LSParser
对象上注册。
异步LSParser
对象支持的事件是:
LSParser
完成加载文档。
另请参阅LSLoadEvent
界面的定义。
LSParser
表示进展。
这个规范并不会试图准确地定义进度事件应该被调度的时间。
这是有意留作为实现依赖的。
以下是应用程序如何调度进度事件的一个示例:解析器开始接收数据后,将调度progress事件以指示解析开始。
从那里开始,为接收和处理的每4096字节的数据调度进度事件。
这只是一个例子,而实现可以选择在解析时随时调度进度事件,或者根本不派发进度事件。
另请参阅LSProgressEvent
界面的定义。
注意:本规范中定义的所有事件都使用命名空间URI "http://www.w3.org/2002/DOMLS"
。
解析输入源时,通过错误处理程序( LSParser.domConfig
的“ error-handler ”参数)向应用程序报告错误。 此规范绝对不会在解析XML或任何其他标记时定义可能发生的所有可能的错误,但会定义一些常见的错误情况。 本DOMError.type
定义的错误和警告的类型( DOMError.type
)有:
"check-character-normalization-failure" [error]
"doctype-not-allowed" [fatal]
true
,并true
一个doctype,则引发。
"no-input-specified" [fatal]
LSInput
对象中指定加载文档时没有指定输入。
"pi-base-uri-not-preserved" [warning]
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]
true
,并且在实体的替换文本中遇到未绑定的命名空间前缀,则可能会引发实现相关警告。
不会强制执行此警告,因为某些现有的解析器可能无法在实体的替换文本中识别未绑定的命名空间前缀。
"unknown-character-denormalization" [fatal]
false
并且遇到处理器无法确定归一化属性的字符,则引发。
"unsupported-encoding" [fatal]
"unsupported-media-type" [fatal]
true
并且遇到不支持的介质类型,则引发。
除了提出定义的错误和警告之外,预计实施将会针对任何其他错误和警告情况(如IO错误(未找到文件,拒绝许可,...),XML格式良好错误,等等。
另见Document Object Model (DOM) Level 3 Load and Save Specification 。
Modifier and Type | Field and Description |
---|---|
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
用解析操作的结果替换上下文节点的所有子节点。
|
Modifier and Type | Method and Description |
---|---|
void |
abort()
中止加载当前由
LSParser 加载的
LSParser 。
|
boolean |
getAsync()
true 如果
LSParser 是异步的,
false 如果是同步的。
|
boolean |
getBusy()
true 如果
LSParser 当前正在加载一个文件,否则
false 。
|
DOMConfiguration |
getDomConfig()
解析输入源时使用的
DOMConfiguration 对象。
|
LSParserFilter |
getFilter()
当提供过滤器时,在构建DOM树结构时,实现将调用过滤器。
|
Document |
parse(LSInput input)
从一个标识的资源中解析XML文档
LSInput 。
|
Document |
parseURI(String uri)
从由URI引用[
IETF RFC 2396 ]标识的位置解析XML文档。
|
Node |
parseWithContext(LSInput input, Node contextArg, short action)
从由所标识的资源中解析XML片段
LSInput 和在与所指定的位置插入内容到现有文件
context 个
action 参数。
|
void |
setFilter(LSParserFilter filter)
当提供过滤器时,在构建DOM树结构时,实现将调用过滤器。
|
static final short ACTION_APPEND_AS_CHILDREN
Element
或DocumentFragment
。
static final short ACTION_REPLACE_CHILDREN
Element
,一个Document
,或DocumentFragment
。
static final short ACTION_INSERT_BEFORE
Element
或DocumentFragment
。
static final short ACTION_INSERT_AFTER
Element
或DocumentFragment
。
static final short ACTION_REPLACE
Element
或DocumentFragment
。
DOMConfiguration getDomConfig()
DOMConfiguration
对象。
这个DOMConfiguration
是特定于解析操作的。
从这个无参数值DOMConfiguration
对象被自动传递到DOMConfiguration
对象上的Document
所创建或使用的,由所述解析操作。
DOM应用程序负责将所需的参数值从该DOMConfiguration
对象传递到DOMConfiguration
对象引用的Document
对象。
DOMConfiguration
对象为LSParser
添加或修改下列参数:
"charset-overrides-xml-encoding"
true
LSInput
协议中的任何编码。
false
"disallow-doctype"
true
false
"ignore-unknown-character-denormalizations"
"infoset"
DOMConfiguration
,请参阅DOMConfiguration的定义。
与在[ DOM Level 3 Core ],该参数将默认为true
为LSParser
。
"namespaces"
true
false
"resource-resolver"
LSResourceResolver
对象的引用,或null。
如果遇到外部资源(如外部XML实体或XML模式位置)时,这个参数的值不为空,执行将要求LSResourceResolver
在这个参数中引用解决了资源。
"supported-media-types-only"
true
false
"validate"
DOMConfiguration
,请参阅DOMConfiguration的定义。
与[ DOM Level 3 Core ]不同,即使该参数设置为false
,内部子集的处理也始终false
。
"validate-if-schema"
DOMConfiguration
,请参阅DOMConfiguration的定义。
与[ DOM Level 3 Core ]不同,即使将此参数设置为false
,也始终会执行内部子集的false
。
"well-formed"
DOMConfiguration
,请参阅DOMConfiguration的定义。
与[ DOM Level 3 Core ]不同,此参数不能设置为false
。
LSParserFilter getFilter()
DOMConfiguration
操作已被应用之后调用过滤器。
例如,如果“ validate ”设置为true
,则在调用过滤器之前完成验证。
void setFilter(LSParserFilter filter)
DOMConfiguration
参数已经被应用。
例如,如果“ validate ”设置为true
,则在调用过滤器之前完成验证。
boolean getAsync()
true
如果
LSParser
是异步的,
false
如果是同步的。
boolean getBusy()
true
如果
LSParser
当前正在加载一个文件,否则
false
。
Document parse(LSInput input) throws DOMException, LSException
LSInput
的资源中解析XML文档。
input
- 要从中读取文档的来源的
LSInput
。
LSParser
是同步LSParser
,则返回新创建和填充的Document
。
如果LSParser
是异步的, null
被返回,因为文档对象可能还没有被构造的本方法返回时。
DOMException
- INVALID_STATE_ERR:如果
LSParser
的
LSParser.busy
属性为
true
则
true
。
LSException
- PARSE_ERR:如果LSParser
无法加载XML文档,则引发。
如果DOM应用程序希望获取有关错误的详细信息, DOMErrorHandler
使用参数“ error-handler ”附加一个DOMErrorHandler
。
Document parseURI(String uri) throws DOMException, LSException
uri
- 要读取的XML文档的位置。
LSParser
是同步LSParser
,则返回新创建和填充的Document
,如果发生错误,则返回null
。
如果LSParser
是异步的, null
被返回,因为文档对象可能还没有被构造的本方法返回时。
DOMException
- INVALID_STATE_ERR:如果
LSParser.busy
属性为
true
则
true
。
LSException
- PARSE_ERR:如果LSParser
无法加载XML文档,则引发。
如果DOM应用程序希望获得有关错误的详细信息, DOMErrorHandler
使用参数“ error-handler ”附加DOMErrorHandler
。
Node parseWithContext(LSInput input, Node contextArg, short action) throws DOMException, LSException
LSInput
的资源中解析XML片段,并将内容插入到使用context
和action
参数指定的位置的现有文档中。
当解析输入流时,上下文节点(或其父,取决于结果将插入的位置)用于解析未绑定的命名空间前缀。
上下文节点的ownerDocument
节点(或节点本身,如果节点类型为DOCUMENT_NODE
)用于解析默认属性和实体引用。
Document
节点和行动是ACTION_REPLACE_CHILDREN
,然后就是作为上下文节点传递的文档将被改变,以使得其xmlEncoding
, documentURI
, xmlVersion
, inputEncoding
, xmlStandalone
,以及所有其他的此类属性都设置为它们如果使用LSParser.parse()
解析输入源,将被设置为。
LSParser
是异步的( LSParser.async
是true
)。
ErrorHandler
与“相关实例error-handler所述的”参数DOMConfiguration
。
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
中定义了ACTION_TYPES
组可能的操作。
DOMException
- HIERARCHY_REQUEST_ERR:如果内容无法替代,则在上下文节点之前,之后或之后插入(在[ DOM Level 3 Core ]中也可以看到Node.insertBefore
或Node.replaceChild
))。
LSParser
不支持此方法,或者如果上下文节点的类型为Document
,并且DOM实现不支持替换DocumentType
子Element
或Element
子节点,则DocumentType
。
LSParser.busy
属性为true
则true
。
LSException
- PARSE_ERR:如果LSParser
无法加载XML片段,则引发。
如果DOM应用程序希望获得有关错误的详细信息, DOMErrorHandler
使用参数“ error-handler ”附加一个DOMErrorHandler
。
void abort()
LSParser
加载的文档的加载。
如果LSParser
当前不忙,则调用此方法什么也不做。