xmerl_sax_parser
[医]xmerl[医]萨克斯[医]解析器
模块
[医]xmerl[医]萨克斯[医]解析器
模块摘要
XML SAX解析器API
描述
XML的SAX解析器,它通过回调接口发送事件。SAX是简单XML API
,最初是只使用Java的API。SAX是第一个在Java中被广泛采用的xml API,它是事实上
标准,其中有几个版本的编程语言环境,而不是Java。
数据类型
option()
用于自定义解析器行为的选项。可能的备选办法是:
{continuation_fun, ContinuationFun}
ContinuationFun
是一个回调函数,用于决定如果解析器在文档完成之前运行到EOF,应该做什么。{continuation_state, term()}
在连续回调函数中可访问的状态。{event_fun, EventFun}
EventFun
是解析器事件的回调函数。{event_state, term()}
在事件回调函数中可访问的状态。{file_type, FileType}
标志,该标志通知解析器是否解析DTD或普通XML文件%28默认的普通%29。
FileType = normal | dtd
{encoding, Encoding}
设置默认字符集使用%28默认UTF-8%29。只有当XML文档没有显式地给出此字符集时,才使用此字符集。
Encoding = utf8 | {utf16,big} | {utf16,little} | latin1 | list
skip_external_dtd
在解析期间跳过外部DTD。event()
通过回调发送给用户的SAX事件。
startDocument
接收文档开头的通知。SAX解析器将只在任何其他事件回调之前发送此事件一次。endDocument
接收文档结束的通知。SAX解析器将只发送该事件一次,这将是解析过程中的最后一个事件。{startPrefixMapping, Prefix, Uri}
开始前缀-URI名称空间映射的范围。注意,启动/结束前缀映射事件不能保证正确嵌套:所有startPrefix映射事件都将发生在相应的startElement事件之前,而所有endPrefix映射事件都将在相应的endElement事件之后立即发生,但它们的顺序在其他情况下不能得到保证。由于“XML”前缀是预先声明的和不可变的,因此不会出现“XML”前缀的开始/结束前缀事件。
Prefix = string()
Uri = string()
{endPrefixMapping, Prefix}
结束前缀-URI映射的范围。
Prefix = string()
{startElement, Uri, LocalName, QualifiedName, Attributes}
接收元素开头的通知。分析器将在XML文档中每个元素的开头发送此事件;即使元素为空%29,也会为每个startElement事件%28提供相应的endElement事件。所有元素%27s的内容都将按顺序在相应的End Element事件之前报告。
Uri = string()
LocalName = string()
QualifiedName = {Prefix, LocalName}
Prefix = string()
Attributes = [{Uri, Prefix, AttributeName, Value}]
AttributeName = string()
Value = string()
{endElement, Uri, LocalName, QualifiedName}
接收元素结束的通知。SAX解析器将在XML文档中的每个元素的末尾发送此事件; 每个endElement事件都会有相应的startElement事件(即使元素为空)。
Uri = string()
LocalName = string()
QualifiedName = {Prefix, LocalName}
Prefix = string()
{characters, string()}
接收字符数据通知。{ignorableWhitespace, string()}
接收元素内容中可忽略空格的通知。{processingInstruction, Target, Data}
接收处理指令的通知。分析器将为找到的每条处理指令发送一次此事件:请注意,处理指令可能发生在主文档元素之前或之后。
Target = string()
Data = string()
{comment, string()}
在文档中的任何位置报告XML注释(文档元素的内部和外部)。startCDATA
报告CDATA部分的开始。CDATA部分的内容将通过常规字符事件进行报告。endCDATA
报告CDATA部分的结尾。{startDTD, Name, PublicId, SystemId}
报告DTD声明的开始,它报告DOCTYPE声明的开始。如果文档没有DOCTYPE声明,则不会发送此事件。
Name = string()
PublicId = string()
SystemId = string()
endDTD
报告DTD声明的结束,它的%27s报告DOCTYPE声明的结束。{startEntity, SysId}
报告一些内部和外部XML实体的开始。???{endEntity, SysId}
报告实体的结束。???{elementDecl, Name, Model}
报告元素类型声明。内容模型将由字符串“空”、字符串“任意”或带括号的组组成,可选地后面跟着出现指示器。该模型将被规范化,以便所有参数实体都被完全解析,所有空白被删除,并且将包括括起来的括号。其他规范化%28,如删除冗余括号或简化事件指示器%29,由解析器自行决定。
Name = string()
Model = string()
{attributeDecl, ElementName, AttributeName, Type, Mode, Value}
报告属性类型声明。
ElementName = string()
AttributeName = string()
Type = string()
Mode = string()
Value = string()
{internalEntityDecl, Name, Value}
报告内部实体声明。
Name = string()
Value = string()
{externalEntityDecl, Name, PublicId, SystemId}
报告分析过的外部实体声明。
Name = string()
PublicId = string()
SystemId = string()
{unparsedEntityDecl, Name, PublicId, SystemId, Ndata}
接收未解析实体声明事件的通知。
Name = string()
PublicId = string()
SystemId = string()
Ndata = string()
{notationDecl, Name, PublicId, SystemId}
接收符号声明事件的通知。
Name = string()
PublicId = string()
SystemId = string()
unicode_char()
表示有效Unicode码点的整数。unicode_binary()
二进制,字符编码为UTF-8或UTF-16。latin1_binary()
二进制,字符编码用iso-拉丁语-1。
出口
file(Filename, Options) -> Result
类型
解析包含XML文档的文件。此函数使用默认的延续函数以块形式读取文件。
stream(Xml, Options) -> Result
类型
解析包含XML文档的流。
回调函数
回调接口的基础是用户向解析器发送带有正确签名的乐趣。
出口
ContinuationFun(State) -> {NewBytes, NewState}
类型
只要解析器用完输入数据,就会调用该函数。如果函数无法获取更多输入,则返回空列表或二进制文件(取决于stream / 2中的开始输入)。其他类型的错误通过例外来处理。如果继续函数遇到致命错误,请使用throw / 1发送以下元组{Tag = atom(),Reason = string()}。标记是标识发送异常的功能实体的原子,而原因是描述问题的字符串。
EventFun(Event, Location, State) -> NewState
类型
这个函数被解析器发送的每个事件调用。错误处理是通过异常完成的。如果应用程序遇到致命错误,请使用throw / 1发送以下元组{Tag = atom(),Reason = string()}。标记是标识发送异常的功能实体的原子,而原因是描述问题的字符串。