public interface ContentHandler
This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY. See http://www.saxproject.org for further information.
这是大多数SAX应用程序实现的主要界面:如果应用程序需要了解基本的解析事件,它实现了这个接口和寄存器的使用方法的一个实例setContentHandler
SAX解析器。解析器使用实例来报告相关的事件的基本文档,如元素的开始和结束以及字符数据。
在这个接口中的事件的顺序是非常重要的,并反映在文档中的信息的顺序。例如,所有元素的内容(字符数据处理指令和/或子元素)的出现,为不同的事件,以及相应的EndElement事件之间。
这个界面是类似于现在已经1 documenthandler SAX接口,但它增加了支持命名空间和报告跳过实体(非验证XML处理器)。
同时应注意,在java.net
包ContentHandler
类是也;这意味着它不可能是一个坏主意
导入java .net *;进口org。XML。萨克斯。*;
事实上,“导入…*”通常是一个草率的编程的一个标志,无论如何,所以用户应该考虑这一个功能,而不是一个错误。
XMLReader
,
DTDHandler
,
ErrorHandler
Modifier and Type | Method and Description |
---|---|
void |
characters(char[] ch, int start, int length)
接收字符数据的通知。
|
void |
endDocument()
接收文档结尾的通知。
|
void |
endElement(String uri, String localName, String qName)
接收一个元素的结束的通知。
|
void |
endPrefixMapping(String prefix)
最后一个前缀,URI映射范围。
|
void |
ignorableWhitespace(char[] ch, int start, int length)
收到可忽略空白元素内容的通知。
|
void |
processingInstruction(String target, String data)
接收处理指令的通知。
|
void |
setDocumentLocator(Locator locator)
接收对象定位SAX文档事件的起源。
|
void |
skippedEntity(String name)
接收跳过实体的通知。
|
void |
startDocument()
接收文档开始的通知。
|
void |
startElement(String uri, String localName, String qName, Attributes atts)
接收元素开始的通知。
|
void |
startPrefixMapping(String prefix, String uri)
开始一个URI命名空间前缀映射范围。
|
void setDocumentLocator(Locator locator)
SAX解析器是大力鼓励(虽然不是绝对必需的)提供一个定位:如果它这样做,它必须通过调用此方法调用中的任何其他方法在ContentHandler接口定位器供应中的应用。
该定位器允许应用程序,以确定任何文档相关的事件的最终位置,即使解析器不报告一个错误。通常情况下,应用程序将使用此信息来报告自己的错误(如不匹配应用程序的业务规则的字符内容)。由定位器返回的信息可能不足以用于搜索引擎。
请注意,定位器将返回正确的信息只有在调用SAX事件回调后startDocument
返回之前endDocument
叫做。应用程序不应该尝试在任何其他时间使用它。
locator
-可以返回任何SAX文档事件的位置的对象
Locator
void startDocument() throws SAXException
SAX解析器将调用这个方法只有一次,在任何其他事件回调(除setDocumentLocator
)。
SAXException
-萨克斯例外,可能是包装的另一个例外
endDocument()
void endDocument() throws SAXException
有一个明显的矛盾之间的文件这个方法和ErrorHandler.fatalError(org.xml.sax.SAXParseException)
文档。直到这个模糊是未来的主要版本解决,客户不应该假设enddocument()是否会或不会被调用时,解析器报告了fatalerror()或抛出异常。
SAX解析器将调用这个方法只有一次,这将是最后的方法,在分析调用。解析器不应调用此方法,直到它已被遗弃的解析(因为一个不可恢复的错误)或达到结束输入。
SAXException
-萨克斯例外,可能是包装的另一个例外
startDocument()
void startPrefixMapping(String prefix, String uri) throws SAXException
从这个事件的信息对于正常的名称空间处理是不必要的:SAX XML读取器会自动替换前缀的元素和属性名称时,http://xml.org/sax/features/namespaces
特征是真正的(默认)。
然而情况有,当应用程序需要在字符数据或在属性值中使用前缀,在那里他们不能自动扩展;启动/ endprefixmapping事件扩展前缀在这些上下文中的应用本身提供的信息,如果有必要的话。
注意:开始/ endprefixmapping事件不保证是正确的嵌套彼此相对:所有startprefixmapping事件将立即发生相应的startElement
事件之前,所有的endPrefixMapping
事件将相应的endElement
事件后立即发生,但它们的顺序是没有保证的。
应该有启动/ endprefixmapping事件为“XML”的前缀,因为它是预先说明的,不变的。
prefix
-命名空间前缀的声明。一个空字符串用于默认元素命名空间,它没有前缀。
uri
的命名空间URI前缀映射到
SAXException
-客户端可能会抛出一个异常处理过程中
endPrefixMapping(java.lang.String)
,
startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
void endPrefixMapping(String prefix) throws SAXException
看到startPrefixMapping
详情。这些事件会相应的endElement
事件后立即发生,但endPrefixMapping
事件的顺序是没有保证的。
prefix
-前缀被映射。当一个默认映射范围结束时,这是一个空字符串。
SAXException
-客户端可能会抛出一个异常处理过程中
startPrefixMapping(java.lang.String, java.lang.String)
,
endElement(java.lang.String, java.lang.String, java.lang.String)
void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException
分析器将调用此方法在XML文档中的每一个元素的开始;也会为每一个不同事件对应endElement
事件(即使是空元素)。所有的元素的内容会被报道,为了对应前EndElement事件。
此事件允许每个元素的三个名称组件:
任何或所有这些提供了可能,这取决于http://xml.org/sax/features/namespaces价值观和http://xml.org/sax/features/namespace-prefixes性质:
注意,设置属性列表只包含明确的价值属性(指定或默认):#隐含属性将被忽略。属性列表将包含用于命名空间声明的属性(属性xmlns *)只有http://xml.org/sax/features/namespace-prefixes
属性为true(这是默认值是false,与真实值的支持是可选的)。
像characters()
,属性值可能需要一个以上的char
价值特征。
uri
的命名空间URI或空字符串,如果元素没有命名空间URI命名空间或如果不进行处理
localName
的本地名称(无前缀),或空字符串,如果命名空间处理不执行
qName
的限定名称(前缀),或空字符串,如果名称不可用
atts
的属性附加到元素。如果没有属性,则将是一个空的属性对象。这个对象在startElement返回值是未定义的
SAXException
-萨克斯例外,可能是包装的另一个例外
endElement(java.lang.String, java.lang.String, java.lang.String)
,
Attributes
,
AttributesImpl
void endElement(String uri, String localName, String qName) throws SAXException
SAX解析器将调用此方法在XML文档中的每个元素的结束;也会为每一个事件对应的startElement
EndElement事件(即使是空元素)。
在名称的信息,看到不同。
uri
的命名空间URI或空字符串,如果元素没有命名空间URI命名空间或如果不进行处理
localName
的本地名称(无前缀),或空字符串,如果命名空间处理不执行
qName
-合格的XML名称(前缀),或空字符串,如果名称不可用
SAXException
-萨克斯例外,可能是包装的另一个例外
void characters(char[] ch, int start, int length) throws SAXException
解析器将调用此方法来报告字符数据的每个块。SAX解析器可能会返回在一块连续的字符数据,也可以把它分为几块;但是,在任何一个事件的所有字符必须来自同一个外部实体,定位提供了有用的信息。
该应用程序必须不试图从指定范围以外的数组读取。
个人的角色可能由一个以上的java char
价值。有两个重要的情况下,发生这种情况,因为字符不能被表示在只有十六位。在一个案例中,人物都是在代理项对的代表,用两个特殊的Unicode值。这样的人物,在所谓的“星光”,一个代码点以上U + FFFF。第二个案例涉及复合字符,如一个基本字符,结合一个或多个重音字符。
你的代码不应该假定使用char
-at-a-time成语算法将以字符为单位工作;在某些情况下他们会分裂特征。这是相关的任何XML允许任意字符,如属性值,处理指令数据,以及评论,以及在该方法中报告的数据。这也是一般相关每当java代码操纵国际化文本;问题不是唯一的XML。
请注意,有些解析器将报告在元素内容中使用ignorableWhitespace
方法而不是这一个空格(验证解析器必须这样做)。
ch
从XML文档的字符
start
-数组中的起始位置
length
-从数组中读取的字符数
SAXException
-萨克斯例外,可能是包装的另一个例外
ignorableWhitespace(char[], int, int)
,
Locator
void ignorableWhitespace(char[] ch, int start, int length) throws SAXException
验证解析器必须使用此方法报告每一块元素内容中的空格(参见W3C推荐1、2.10节):非验证解析器也可能如果他们能够解析和利用内容模型采用这种方法。
SAX解析器可能会返回在一块连续的空格,或他们可能会分裂成几块;但是,在任何一个事件的所有字符必须来自同一个外部实体,使定位器提供有用的信息。
该应用程序必须不试图从指定范围以外的数组读取。
ch
从XML文档的字符
start
-数组中的起始位置
length
-字符数从数组中读取
SAXException
-萨克斯例外,可能是包装的另一个例外
characters(char[], int, int)
void processingInstruction(String target, String data) throws SAXException
分析程序将调用此方法一次,每个处理指令发现:请注意,处理指令可能发生在主文档元素之前或之后。
SAX解析器必须报告XML声明(XML 1、2.8节)或文本声明(XML 1、第4.3.1)使用这种方法。
像characters()
,加工指令的数据可能需要一个以上的char
价值特征。
target
-处理指令的目标
data
-处理指令数据,如果提供的是无或空。数据不包括任何空格分离目标
SAXException
-萨克斯例外,可能是包装的另一个例外
void skippedEntity(String name) throws SAXException
分析器每次跳过实体时都会调用这个方法。非验证的处理器可能跳过实体,如果他们没有看到声明(因为,例如,实体是在外部DTD子集宣布)。所有的处理器可以跳过外部实体,根据不同的http://xml.org/sax/features/external-general-entities
价值观和http://xml.org/sax/features/external-parameter-entities
性质。
name
-跳过的实体的名称。如果它是一个参数实体的名称将开始与“%”,如果是外部DTD子集,它将字符串“[定义]”
SAXException
-萨克斯例外,可能是包装的另一个例外
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.