非常教程

Erlang 20参考手册

xmerl

xmerl_sax_parser

模块

[医]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()}。标记是标识发送异常的功能实体的原子,而原因是描述问题的字符串。

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1