查看源代码 xmerl_scan (xmerl v2.1)
单遍 XML 扫描器。
此模块是 XML 解析器的接口,它处理 XML 1.0。XML 解析器通过 xmerl_scan:string/[1,2]
或 xmerl_scan:file/[1,2]
激活。它返回在 xmerl.hrl
中定义的类型的记录。
另请参阅 “自定义函数”教程。
概要
类型
一个 XML 文档。
扫描器的全局状态,由 #xmerl_scanner{}
记录表示。
选项允许自定义扫描器的行为。另请参阅 “自定义函数”教程。
记录 #xmlDocument{}
。
记录 #xmlElement{}
。
函数
累积并规范化空格。
获取 ContinuationState
。
设置 ContinuationState,用于延续函数中。
获取 EventState
。
设置 EventState,用于事件函数中。
获取 FetchState
。
设置 FetchState,用于获取函数中。
解析包含 XML 文档的文件
获取 HookState
。
设置 HookState,用于钩子函数中。
获取 RulesState
。
设置 RulesState,用于规则函数中。
解析包含 XML 文档的字符串
获取 UserState
。
设置 UserState
,用于用户函数中。
类型
-type document() :: xmlElement() | xmlDocument().
一个 XML 文档。
由 xmerl_scan:string/[1,2]
和 xmerl_scan:file/[1,2]
返回的文档。返回的记录类型取决于传递给函数的 document
选项的值。
-type global_state() :: xmerl_scanner().
扫描器的全局状态,由 #xmerl_scanner{}
记录表示。
-type option_list() :: [{atom(), term()} | {atom(), fun(), term()} | {atom(), fun(), fun(), term()}].
选项允许自定义扫描器的行为。另请参阅 “自定义函数”教程。
可能的选项是
{acc_fun, Fun}
- 回调函数,用于累积实体的内容。
{continuation_fun, Fun} | {continuation_fun, Fun, ContinuationState}
- 回调函数,用于决定如果扫描器在文档完成之前遇到 EOF 时该怎么做。
{event_fun, Fun} | {event_fun, Fun, EventState}
- 回调函数,用于处理扫描器事件。
{fetch_fun, Fun} | {fetch_fun, Fun, FetchState}
- 回调函数,用于获取外部资源。
{hook_fun, Fun} | {hook_fun, Fun, HookState}
- 回调函数,用于处理已识别的文档实体。
{close_fun, Fun}
- 当文档已完全解析时调用。
{rules, ReadFun, WriteFun, RulesState} | {rules, Rules}
- 处理解析时扫描器信息的存储。
{user_state, UserState}
- 可从所有自定义函数访问的全局状态变量
{fetch_path, PathList}
- PathList 是获取文件时要搜索的目录列表。如果相关文件不在 fetch_path 中,则 URI 将用作文件名。
{space, Flag}
preserve
(默认)保留空格,normalize
累积连续空格并将其替换为一个空格。{line, Line}
- 指定扫描包含 XML 片段的文档的起始行。
{namespace_conformant, Flag}
- 控制是否表现为符合命名空间的 XML 解析器,
false
(默认)表示否,否则为true
。 {validation, Flag}
- 控制是否作为验证 XML 解析器处理:
off
(默认)不进行验证,或者通过 DTD 进行dtd
验证,或者通过 XML Schema 进行schema
验证。false
和true
选项已过时(即,它们可能会在未来的版本中删除),如果使用,false
等于off
,true
等于dtd
。 {schemaLocation, [{Namespace,Link}|...]}
- 明确告知要使用哪个 XML Schema 文档来验证 XML 文档。与
{validation,schema}
选项一起使用。 {quiet, Flag}
- 如果 Xmerl 应静默运行且不向标准输出输出任何信息,则设置为
true
(默认false
)。 {doctype_DTD, DTD}
- 允许在 XML 文档中不可用时指定 DTD 名称。此选项仅在与
{validation,
选项一起使用时才有效。dtd
} {xmlbase, Dir}
- XML 基本目录。如果使用 string/1,则默认值为当前目录。如果使用 file/1,则默认值为给定文件的目录。
{encoding, Enc}
- 设置使用的默认字符集(默认 UTF-8)。仅当 XML 声明中未明确给出此字符集时才使用此字符集。
{document, Flag}
- 如果 Xmerl 应将完整的 XML 文档作为 xmlDocument 记录返回,则设置为
true
(默认false
)。 {comments, Flag}
- 如果 Xmerl 应跳过注释,则设置为
false
,否则将作为 xmlComment 记录返回(默认true
)。 {default_attrs, Flag}
- 如果 Xmerl 应将缺少属性且具有定义的默认值的属性添加到元素,则设置为
true
(默认false
)。 {allow_entities, Flag}
- 如果 XML 文档中存在 ENTITY 声明,则设置为
true
,如果xmerl_scan
不应失败(默认false
)。
-type xmlDocument() :: xmerl:xmlDocument().
记录 #xmlDocument{}
。
记录定义在 xmerl.hrl
中找到。
-type xmlElement() :: xmerl:xmlElement().
记录 #xmlElement{}
。
记录定义在 xmerl.hrl
中找到。
函数
-spec accumulate_whitespace(Text, global_state(), How, Acc) -> {NewAcc, NewText, global_state()} when Text :: string(), How :: preserve | normalize, Acc :: string(), NewAcc :: string(), NewText :: string().
累积并规范化空格。
-spec cont_state(global_state()) -> ContinuationState when ContinuationState :: term().
获取 ContinuationState
。
请参阅 “自定义函数”教程。
-spec cont_state(ContState :: term(), global_state()) -> global_state().
设置 ContinuationState,用于延续函数中。
当解析器遇到字节流的末尾时,将调用延续函数。请参阅 “自定义函数”教程。
-spec event_state(global_state()) -> EventState when EventState :: term().
获取 EventState
。
请参阅 “自定义函数”教程。
-spec event_state(EventState :: term(), global_state()) -> global_state().
设置 EventState,用于事件函数中。
在解析实体的开头和结尾调用事件函数。请参阅 “自定义函数”教程。
-spec fetch_state(global_state()) -> FetchState when FetchState :: term().
获取 FetchState
。
请参阅 “自定义函数”教程。
-spec fetch_state(FetchState :: term(), global_state()) -> global_state().
设置 FetchState,用于获取函数中。
当解析器获取外部资源(例如 DTD)时,将调用获取函数。请参阅 “自定义函数”教程。
-spec file(Filename :: string()) -> {xmlElement(), Rest} | {error, Reason} when Rest :: string(), Reason :: term().
等效于 file(Filename, [])
。
-spec file(Filename :: string(), option_list()) -> {document(), Rest} | {error, Reason} when Rest :: string(), Reason :: term().
解析包含 XML 文档的文件
-spec hook_state(global_state()) -> HookState when HookState :: term().
获取 HookState
。
请参阅 “自定义函数”教程。
-spec hook_state(HookState :: term(), global_state()) -> global_state().
设置 HookState,用于钩子函数中。
当解析器已解析完完整实体时,将调用钩子函数。请参阅 “自定义函数”教程。
-spec rules_state(global_state()) -> RulesState when RulesState :: term().
获取 RulesState
。
请参阅 “自定义函数”教程。
-spec rules_state(RulesState :: term(), global_state()) -> global_state().
设置 RulesState,用于规则函数中。
当解析器将扫描器信息存储在规则数据库中时,将调用规则函数。请参阅 “自定义函数”教程。
-spec string(Text :: string()) -> {xmlElement(), Rest} when Rest :: string().
等效于 string(Text, [])
。
-spec string(Text :: string(), option_list()) -> {document(), Rest} when Rest :: string().
解析包含 XML 文档的字符串
-spec user_state(global_state()) -> UserState when UserState :: term().
获取 UserState
。
请参阅 “自定义函数”教程。
-spec user_state(UserState :: term(), G :: global_state()) -> global_state().
设置 UserState
,用于用户函数中。
请参阅 “自定义函数”教程。