查看源代码 Xmerl 发行说明

本文档描述了对 Xmerl 应用程序所做的更改。

Xmerl 2.1

已修复的 Bug 和故障

  • 修正了从内部结构导出到 XML 的函数,以便正确处理 cdata 类型的 xmlText 项。它们之前只是作为普通文本导出,而不是在 CDATA 部分输出。

    自有 ID:OTP-19217 辅助 ID:ERIERL-1104

改进和新功能

Xmerl 2.0

已修复的 Bug 和故障

  • Xmerl 中的一些默认值已更改,以避免在解析不受信任的 XML 时出现 XML 外部实体 (XXE) 漏洞。

    xmerl_scan:allow_entities 的默认值已更改为 false。xmerl_sax_parser:external_entities 的默认值已更改为 none。

    潜在的不兼容性

    自有 ID:OTP-19079 辅助 ID:GH-7539

  • xmerl_sax_parser 中,一个在 startEntity 的事件回调中更新的事件状态未被保存。

    自有 ID:OTP-19086 辅助 ID:GH-8452

改进和新功能

  • 函数规范和类型已添加到所有公共 API 函数中。

    自有 ID:OTP-18913

  • 作为 xmerl_xml 的替代方案,添加了一个新的导出模块 xmerl_xml_indent,它提供了开箱即用的缩进输出。

    自有 ID:OTP-18922 辅助 ID:PR-7942

  • 文档已迁移到使用 Markdown 和 ExDoc。

    自有 ID:OTP-18955 辅助 ID:PR-8026

Xmerl 1.3.34.1

已修复的 Bug 和故障

  • 修正了从内部结构导出到 XML 的函数,以便正确处理 cdata 类型的 xmlText 项。它们之前只是作为普通文本导出,而不是在 CDATA 部分输出。

    自有 ID:OTP-19217 辅助 ID:ERIERL-1104

Xmerl 1.3.34

已修复的 Bug 和故障

  • 将所有 <tt> html 标签更新为 <code>。

    自有 ID:OTP-18799 辅助 ID:PR-7695

Xmerl 1.3.33

已修复的 Bug 和故障

  • xmerl 版本 1.3.32 在 OTP 26.0.1 中发布,但使用了错误的 1.3.31.1 版本号。此错误的版本号继续出现在 OTP 26.0.2、OTP 26.1 和 OTP 26.1.1 中。但是,这些 OTP 版本中的实际 xmerl 代码对应于 xmerl 版本 1.3.32。

    自有 ID:OTP-18803

Xmerl 1.3.32

已修复的 Bug 和故障

  • xmerl_scanxmerl_sax_parser 添加了新选项,以便可以限制解析器的行为,从而避免一些 XML 安全问题。

    xmerl_scan 获得了一个新选项

    • {allow_entities, Boolean} - 通过将此选项设置为 false 可以禁用实体(默认值为 true

    xmerl_sax_parser 获得以下选项

    • disallow_entities - 不允许文档中使用实体

    • {entity_recurse_limit, N} - 设置实体递归深度的限制(默认为 3)

    • {external_entities, AllowedType} - 指定允许的外部实体类型,这也会影响外部 DTD。类型为 all(默认值)、filenone

    • {fail_undeclared_ref, Boolean} - 设置由于未解析外部文件而导致的未声明引用的行为(true 为默认值)

    旧选项 skip_external_dtd 仍然有效,并且与 {external_entities, none}{fail_undeclared_ref, false} 相同,但仅影响 DTD,而不影响其他外部引用。

    自有 ID:OTP-18595 辅助 ID:ERIERL-944

Xmerl 1.3.31.2

已修复的 Bug 和故障

  • 修正了从内部结构导出到 XML 的函数,以便正确处理 cdata 类型的 xmlText 项。它们之前只是作为普通文本导出,而不是在 CDATA 部分输出。

    自有 ID:OTP-19217 辅助 ID:ERIERL-1104

Xmerl 1.3.31.1

已修复的 Bug 和故障

  • xmerl_scanxmerl_sax_parser 添加了新选项,以便可以限制解析器的行为,从而避免一些 XML 安全问题。

    xmerl_scan 获得了一个新选项

    • {allow_entities, Boolean} - 通过将此选项设置为 false 可以禁用实体(默认值为 true

    xmerl_sax_parser 获得以下选项

    • disallow_entities - 不允许文档中使用实体

    • {entity_recurse_limit, N} - 设置实体递归深度的限制(默认为 3)

    • {external_entities, AllowedType} - 指定允许的外部实体类型,这也会影响外部 DTD。类型为 all(默认值)、filenone

    • {fail_undeclared_ref, Boolean} - 设置由于未解析外部文件而导致的未声明引用的行为(true 为默认值)

    旧选项 skip_external_dtd 仍然有效,并且与 {external_entities, none}{fail_undeclared_ref, false} 相同,但仅影响 DTD,而不影响其他外部引用。

    自有 ID:OTP-18595 辅助 ID:ERIERL-944

Xmerl 1.3.31

改进和新功能

  • 用 tuple_size/1 或 byte_size/1 替换 size/1

    size/1 BIF 未被 JIT 优化,其使用可能会导致 Dialyzer 的类型更差。

    当知道被测试的值必须是元组时,应始终首选 tuple_size/1

    当知道被测试的值必须是二进制时,应首选 byte_size/1。但是,byte_size/1 也接受位串(将大小向上舍入为整数个字节),因此必须确保在调用 byte_size/ 之前先调用 is_binary/1,以确保拒绝位串。请注意,编译器会删除对 is_binary/1 的冗余调用,因此,如果不确定之前的代码是否确保了参数是二进制,则在调用 byte_size/1 之前添加 is_binary/1 测试不会有任何损害。

    自有 ID:OTP-18432 辅助 ID:GH-6672,PR-6793,PR-6784,PR-6787,PR-6785,PR-6682,PR-6800,PR-6797,PR-6798,PR-6799,PR-6796,PR-6813,PR-6671,PR-6673,PR-6684,PR-6694,GH-6677,PR-6696,PR-6670,PR-6674

Xmerl 1.3.30

改进和新功能

  • 有一个新的配置选项 --enable-deterministic-build,它将在构建 Erlang/OTP 时应用 deterministic 编译器选项。deterministic 选项已得到改进,可以在多个应用程序中消除更多不确定性的来源。

    自有 ID:OTP-18165 辅助 ID:PR-5965

Xmerl 1.3.29

改进和新功能

  • 修复了文档、注释和代码(内部数据结构)中的拼写错误。

    自有 ID:OTP-17935 辅助 ID:PR-5590

Xmerl 1.3.28.1

已修复的 Bug 和故障

  • xmerl_scanxmerl_sax_parser 添加了新选项,以便可以限制解析器的行为,从而避免一些 XML 安全问题。

    xmerl_scan 获得了一个新选项

    • {allow_entities, Boolean} - 通过将此选项设置为 false 可以禁用实体(默认值为 true

    xmerl_sax_parser 获得以下选项

    • disallow_entities - 不允许文档中使用实体

    • {entity_recurse_limit, N} - 设置实体递归深度的限制(默认为 3)

    • {external_entities, AllowedType} - 指定允许的外部实体类型,这也会影响外部 DTD。类型为 all(默认值)、filenone

    • {fail_undeclared_ref, Boolean} - 设置由于未解析外部文件而导致的未声明引用的行为(true 为默认值)

    旧选项 skip_external_dtd 仍然有效,并且与 {external_entities, none}{fail_undeclared_ref, false} 相同,但仅影响 DTD,而不影响其他外部引用。

    自有 ID:OTP-18595 辅助 ID:ERIERL-944

Xmerl 1.3.28

已修复的 Bug 和故障

  • 修复了一个可能导致解析崩溃的 Bug。

    自有 ID:OTP-17388 辅助 ID:OTP-17123

Xmerl 1.3.27.1

已修复的 Bug 和故障

  • xmerl_scanxmerl_sax_parser 添加了新选项,以便可以限制解析器的行为,从而避免一些 XML 安全问题。

    xmerl_scan 获得了一个新选项

    • {allow_entities, Boolean} - 通过将此选项设置为 false 可以禁用实体(默认值为 true

    xmerl_sax_parser 获得以下选项

    • disallow_entities - 不允许文档中使用实体

    • {entity_recurse_limit, N} - 设置实体递归深度的限制(默认为 3)

    • {external_entities, AllowedType} - 指定允许的外部实体类型,这也会影响外部 DTD。类型为 all(默认值)、filenone

    • {fail_undeclared_ref, Boolean} - 设置由于未解析外部文件而导致的未声明引用的行为(true 为默认值)

    旧选项 skip_external_dtd 仍然有效,并且与 {external_entities, none}{fail_undeclared_ref, false} 相同,但仅影响 DTD,而不影响其他外部引用。

    自有 ID:OTP-18595 辅助 ID:ERIERL-944

Xmerl 1.3.27

已修复的 Bug 和故障

  • 修复了 Xmerl SAX 解析器无法处理以 ^M 结尾的文件的问题。

    自有 ID:OTP-17308

Xmerl 1.3.26

已修复的 Bug 和故障

  • 更正了旧 dom 后端示例模块中的命名空间和扩展名称。

    自有 ID:OTP-17060

  • 修复了一个在某些情况下,当使用 skip_external_dtd 选项时不允许未解析引用的 Bug。

    自有 ID:OTP-17061

Xmerl 1.3.25

已修复的 Bug 和故障

  • 修复了一个 Bug,该 Bug 导致函数名称在某些情况下未被标准化,从而在链接中留下空格。

    自有 ID:OTP-16617

Xmerl 1.3.24

已修复的 Bug 和故障

  • 修复了在 XML 内容中使用内部常规引用时的性能问题。

    自有 ID:OTP-16578 辅助 ID:ERIERL-482

Xmerl 1.3.23

已修复的 Bug 和故障

  • 用 erlang:floor/1 替换本地 floor/1 函数。

    自有 ID:OTP-16324

改进和新功能

  • 实现了对解析的实体内容的处理和其他一些改进。

    • 将 SAX 测试套件(xmerl_sax_std_SUITE)更新到最新版本
    • 由于非 SAX xmerl 测试套件 (xmerl_std_SUITE) 使用不同版本的其他套件,因此测试现在使用自己的数据目录
    • 规范 XML 检查已添加到所有适用的测试中。规范,此处适用的是常规规范 XML,并添加了任何表示法声明。输出必须逐字节匹配。
    • 实现了外部实体,既可以用作标记,也可以用作替换文本
    • 在 DTD 解析结束时检查循环引用;当找到引用时也会检查
    • 默认属性在事件中报告
    • 如果属性类型要求,则属性将进行空白规范化
    • 外部实体可以具有与基本文档不同的编码,并且将转码为文档编码
    • DTD 解析中添加了条件部分 (IGNORE/INCLUDE) 处理
    • 现在会对元素内容模型进行格式良好性检查
    • 添加了一些缺失的函数子句

    内部 ID: OTP-16339

Xmerl 1.3.22

修复的错误和故障

  • xmerl_sax_parser 在字符集检测期间崩溃,当 xml 声明属性值缺少结束引号(' 或 ")时。

    内部 ID: OTP-15826

Xmerl 1.3.21

修复的错误和故障

  • 修复了错误打印中的一个拼写错误。

    内部 ID: OTP-14703 辅助 ID: PR-1964

Xmerl 1.3.20.1

修复的错误和故障

  • xmerl_sax_parser 在字符集检测期间崩溃,当 xml 声明属性值缺少结束引号(' 或 ")时。

    内部 ID: OTP-15826

Xmerl 1.3.20

修复的错误和故障

  • 修复了属性中字符引用的处理。

    内部 ID: OTP-15684 辅助 ID: ERL-837

  • 修复了属性中空格字符的规范化,以便在使用字符引用时正常工作。

    内部 ID: OTP-15685 辅助 ID: ERL-475

Xmerl 1.3.19

修复的错误和故障

  • 在某些情况下,当 XML 指令不符合语法时,字符集检测解析会崩溃。

    内部 ID: OTP-15492 辅助 ID: ERIERL-283

Xmerl 1.3.18

修复的错误和故障

  • 改进了文档。

    内部 ID: OTP-15190

Xmerl 1.3.17

修复的错误和故障

  • 修复了文档中的拼写错误。

    内部 ID: OTP-15039

Xmerl 1.3.16.1

修复的错误和故障

  • 在某些情况下,当 XML 指令不符合语法时,字符集检测解析会崩溃。

    内部 ID: OTP-15492 辅助 ID: ERIERL-283

Xmerl 1.3.16

修复的错误和故障

  • 删除了文档中所有旧的未使用文件。

    内部 ID: OTP-14475 辅助 ID: ERL-409, PR-1493

Xmerl 1.3.15

修复的错误和故障

  • 改进了 xmerl_scan 中的累加器函数,以便对于具有字符引用的字符串,只返回一个 #xmlText 记录。

    (感谢 Jimmy Zöger)

    内部 ID: OTP-14377 辅助 ID: PR-1369

Xmerl 1.3.14

修复的错误和故障

  • 在 SAX 解析器 (xmerl_sax_parser) 中修复了几个错误。

    • 当 XML 指令被分段时,没有正确调用延续函数。
    • 当事件回调模块(xmerl_sax_old_dom 和 xmerl_sax_simple)在特定条件下收到 endDocument 事件时,解析器崩溃了。
    • 将内部 ets 表替换为映射,以避免表泄漏。

    内部 ID: OTP-14430

Xmerl 1.3.13

修复的错误和故障

  • 当解析没有显式 XML 命名空间声明的文档时,xmerl_scan 中的 namespace_conformant 选项不起作用。

    内部 ID: OTP-14139

  • 修复了 XML Sax 解析器中的一个“格式良好性”错误,以便在匹配文档之后文件中还有其他内容时返回错误。如果使用 xmerl_sax_parser:stream(),则允许剩余内容,然后可以将其发送到 xmerl_sax_parser:stream() 的新调用以解析下一个文档。

    这样做是为了符合 XML 一致性测试。

    内部 ID: OTP-14211

  • 修复了 XML SAX 解析器中的编译器和 Dialyzer 警告。

    内部 ID: OTP-14212

  • 更改了 XML SAX 解析器中解释文档结尾的方式,以符合 Tim Bray 对标准的评论。这使得可以在流上处理多个文档,标准使得在不等待下一个文档的情况下无法知道文档何时结束(甚至不总是那样)。

    Tim Bray 的评论

    尾随的“杂项”
    允许在根元素之后有一些尾随的垃圾,我认为(但不幸的是太晚了)是 XML 中的一个真正的设计错误。如果我正在编写一个网络客户端,我可能会在看到根元素的结束标记后立即关闭链接,而不是依赖另一端正确关闭它。
    此外,如果我想通过网络链接发送一系列 XML 文档,如果我在根元素之后找到一个处理指令,它是前一个文档的结尾,还是下一个文档的序言的一部分?

    内部 ID: OTP-14213

Xmerl 1.3.12

修复的错误和故障

  • 修复了 xmerl 文档中的许多损坏链接。

    内部 ID: OTP-13880

Xmerl 1.3.11

改进和新功能

  • 内部更改

    内部 ID: OTP-13551

Xmerl 1.3.10

改进和新功能

  • 抑制 Dialyzer 警告。

    内部 ID: OTP-12862

Xmerl 1.3.9

修复的错误和故障

  • 从 xmerl_xsd 模块中删除了 xml.xsd 的内置定义。

    内部 ID: OTP-13070

Xmerl 1.3.8

修复的错误和故障

  • 删除 xmerl 中的编译器警告。

    内部 ID: OTP-12689

Xmerl 1.3.7

修复的错误和故障

  • 更正了以下应用程序的应用程序升级 (appup) 文件

    asn1, common_test, compiler, crypto, debugger, dialyzer, edoc, eldap, erl_docgen, et, eunit, gs, hipe, inets, observer, odbc, os_mon, otp_mibs, parsetools, percept, public_key, reltool, runtime_tools, ssh, syntax_tools, test_server, tools, typer, webtool, wx, xmerl

    向 test_server 添加了一个新的测试实用程序,用于测试 appup 文件。现在 OTP 中的大多数应用程序都使用它。

    (感谢 Tobias Schlager)

    内部 ID: OTP-11744

Xmerl 1.3.6

修复的错误和故障

  • 修复了使用 xmerl_sax_parser:stream/2 函数时,下一个文档的头部出现在缓冲区中的 SAX 解析器问题。

    内部 ID: OTP-11551 辅助 ID: seq12505

改进和新功能

  • Erlang 文件的默认编码已从 ISO-8859-1 更改为 UTF-8。

    XML 文件的编码也已更改为 UTF-8。

    内部 ID: OTP-10907

Xmerl 1.3.5

改进和新功能

  • 教导 xmerl_xpath 在更多情况下解析上下文命名空间。感谢 Daniel White。

    内部 ID: OTP-11461

  • 避免在 xmerl:export() 中的 code_server 上进行序列化。感谢 Richard Carlsson。

    内部 ID: OTP-11463

Xmerl 1.3.4

改进和新功能

  • 修复了 xmerl 文档中的各种拼写错误。感谢 David Welton。

    内部 ID: OTP-11224

Xmerl 1.3.3

改进和新功能

  • 在必要时,已向 Erlang 文件添加了声明编码的注释。该注释旨在在 UTF-8 成为默认编码时在 Erlang/OTP R17B 中删除。

    内部 ID: OTP-10630

  • 更正了一些溢出 PDF 页面宽度的示例。

    内部 ID: OTP-10665

Xmerl 1.3.2

修复的错误和故障

  • 修复了在解析默认声明期间读取新的字节块时出现的延续错误。

    自有 ID: OTP-10063 辅助 ID: seq12049

Xmerl 1.3.1

修复的错误和故障

  • 在 xmerl 文档中添加缺失的空格 (感谢 Ricardo Catalinas Jiménez)

    自有 ID: OTP-9873

  • 修复了 SAX 解析器中的延续错误,并添加了 latin1 作为可识别的编码(不仅限于 iso-8859 变体)。

    自有 ID: OTP-9961

  • 移除了未使用的文件 xmerl_xlink.hrl。感谢 Vlad Dumitrescu 通知我们。

    自有 ID: OTP-9965

  • xmerl 无法处理类型规范内的注释。

    自有 ID: OTP-10023

  • 修复了 SAX 解析器中的一些小错误:错误消息错误、删除 DTD 元素定义中的尾随空格,以及 xmerl_sax_parser 模块中 startDTD 事件的文档错误。

    自有 ID: OTP-10026

Xmerl 1.3

修复的错误和故障

  • 修复了由于 unicode 模块中的更改而导致的非字符的字符检查。

    自有 ID: OTP-9670

  • 在 xmerl_xpath_scan 中将 , 视为特殊字符。(感谢 Anneli Cuss)

    自有 ID: OTP-9753

  • 修复了当 namespace_conformant 标志设置为 true 时属性的命名空间处理中的错误。

    自有 ID: OTP-9821

改进和新功能

  • xml 扫描器的更新

    • xmerl_scan 现在在输出中返回 xmlComment 记录。
      函数 xmerl_scan:file/2xmerl_scan:string/2 现在接受一个新选项 {comments, Flag} 用于过滤注释。
      默认 (true) 是从扫描器返回 #xmlComment 记录,如果不想在输出中包含注释,则应将此标志设置为 false。
    • 添加 default_attrs 选项
      default_attrstrue 时,任何在文档类型中定义了默认值但在当前扫描元素的属性轴中不存在的属性都将添加到其中。
    • 允许返回整个文档
      函数 xmerl_scan:file/2xmerl_scan:string/2 现在接受一个新选项 {document, true} 来生成整个文档作为 xmlDocument 记录,而不是仅仅是根元素节点。
      此选项是获取顶层注释和处理指令的唯一方法,而无需通过自定义函数进行挂钩。这些节点是实现 [规范 XML][c14n-xml] 支持所必需的。
      [c14n-xml]: http://www.w3.org/TR/2008/PR-xml-c14n11-20080129/ 规范 XML
    • 父节点和命名空间在 #xmlAttribute 节点中被跟踪
    • 父节点在 #xmlPI 节点中被跟踪
    • #xmlDecl 记录中设置 vsn 字段
    • 修复命名空间一致性约束
      请参阅 [XML 1.0 中的命名空间(第三版)][1]:前缀 xml 按照定义绑定到命名空间名称 http://www.w3.org/XML/1998/namespace。它可以声明,也可以不声明,并且不能绑定到任何其他命名空间名称。其他前缀不得绑定到此命名空间名称,并且不能声明为默认命名空间。
      前缀 xmlns 仅用于声明命名空间绑定,并且按照定义绑定到命名空间名称 http://www.w3.org/2000/xmlns/。它不能声明。其他前缀不得绑定到此命名空间名称,并且不能声明为默认命名空间。元素名称不得具有前缀 xmlns。
      在符合此规范的 XML 文档中,任何标记都不能包含两个具有相同名称的属性,或者具有相同的本地部分并且具有绑定到相同命名空间名称的前缀的限定名称的属性。
      [1] http://www.w3.org/TR/REC-xml-names/

    xmerl 的 Xpath 功能的更新。

    • 向 xmerl_xpath:write_node/1 添加 #xmlPI 支持
    • 修复 processing-instruction(name?)
    • 修复路径过滤器,支持更多顶级主要表达式
    • 在元素节点中累积注释
    • 实现命名空间轴
      命名空间节点表示为 #xmlNsNode 记录。现在命名空间轴已正确实现,将忽略与声明命名空间的属性对应的属性节点。
      请参阅 [5.3 属性节点][xpath-5.3]
      没有与声明命名空间的属性对应的属性节点。
      [xpath-5.3]: http://www.w3.org/TR/xpath/#attribute-nodes

    (感谢 Anthony Ramine)

    * 潜在的不兼容性 *

    自有 ID: OTP-9664

  • 消除使用已弃用的 regexp 模块

    自有 ID: OTP-9810

Xmerl 1.2.10

修复的错误和故障

  • 修复了 xmerl_xsd 中的模式搜索错误。

    在 xsd_state 记录中需要一个新的标志,因此如果保存状态,则存在不兼容性,并且需要进行状态转换。

    * 与 R14B03 不兼容 *

    自有 ID: OTP-9410

  • 修复了 xmerl_scan 在属性值中包含实体的问题。

    自有 ID: OTP-9411

  • xmerl_scan 中的流式传输错误。

    如果 continuation_fun 在属性值末尾耗尽输入,则会崩溃。(感谢 Simon Cornish)

    自有 ID: OTP-9457

  • 修复了 xmerl_ucs UCS2 小端编码/解码

    纠正了 xmerl_ucs:char_to_ucs2le 中的移位字节数以及从 from_ucs2le 到 from_ucs4le 的递归调用。(感谢 Michal Ptaszek)

    自有 ID: OTP-9548

  • 在 xmerl_ucs 中添加 latin9 (iso-8859-15) 支持 (感谢 David Julien)

    自有 ID: OTP-9552

  • 改进了整个文档、代码注释和错误消息中的拼写

    自有 ID: OTP-9555

Xmerl 1.2.9

修复的错误和故障

  • 修复了 xmerl_xpath @doc 注释中的小拼写错误并改进了标点符号 (感谢 Marcus Marinelli)

    自有 ID: OTP-9187

  • 防止 xmerl 过度规范化属性中的字符引用

    XML 建议的 3.3.3 节给出了属性值规范化的规则。其中一条规则要求在将字符引用替换为引用的字符后,不再重新规范化字符引用。(感谢 Tom Moertel)

    自有 ID: OTP-9274

  • 修复了 SAX 解析器中的默认编码选项。

    自有 ID: OTP-9288

改进和新功能

  • 将 xmerl 测试套件和示例添加到开源发行版中。

    自有 ID: OTP-9228

Xmerl 1.2.8

修复的错误和故障

  • 函数 xmerl_lib:expand_content/1 主要用于扩展简单 XML,但也可以处理 xmerl 记录。此补丁修复了一个遗漏,该遗漏导致 expand_content/1 在扩展 #xmlElement{} 记录时无法维护父列表。(感谢 Ulf Wiger)

    自有 ID: OTP-9034

改进和新功能

  • 移除了一些 dialyzer 警告。

    自有 ID: OTP-9074

Xmerl 1.2.7

修复的错误和故障

  • 声明为 simpleContent 的空元素未正确验证。

    自有 ID: OTP-8599

  • 修复 format_man_pages,使其可以处理所有 man 节,并删除各种 man 页面中的警告/错误。

    自有 ID: OTP-8600

改进和新功能

  • 修复实体检查,以便在使用选项 skip_external_dtd 时,不会因未定义的实体而出现致命错误。

    自有 ID: OTP-8947

Xmerl 1.2.6

修复的错误和故障

  • 修复了 UTF-8 文档中十六进制实体的问题:当文档采用 UTF-8 编码时,xmerl_scan 错误地将十六进制实体替换为 UTF-8 字节,而不是返回字符,就像处理内联 UTF-8 文本和十进制实体一样。(感谢 Paul Guyot。)

    自有 ID: OTP-8697

Xmerl 1.2.5

改进和新功能

  • 所有 Erlang 文件现在都由测试服务器构建,而不是由测试目录 Makefile 构建。

    数据目录中的 Erlang 文件现在由测试套件构建,而不是使用版本控制下的预构建版本。

    移除了许多过时的保护。

    自有 ID: OTP-8537

  • 声明为 simpleContent 的空元素未正确验证。

    自有 ID: OTP-8599

Xmerl 1.2.4

改进和新功能

  • 更新了文档 Makefile,使其可以使用新的文档构建过程。

    自有 ID: OTP-8343

Xmerl 1.2.3

修复的错误和故障

  • parse_reference/3 的一个延续子句的参数顺序错误。

    自有 ID: OTP-8251 辅助 ID: seq11429

改进和新功能

  • xmerl_sax_parser:file/2xmerl_sax_parser:stream/2 添加了一个新选项以关闭外部 DTD 的解析 (skip_external_dtd)。

    自有 ID: OTP-8252 辅助 ID: seq11432

  • 文档现在使用大多数平台上存在的开源工具(xsltproc 和 fop)构建。一个明显的更改是删除了框架。

    自有 ID: OTP-8253

Xmerl 1.2.2

修复的错误和故障

  • xmerl_sax_parse:stream/2 在没有定义延续函数的情况下,即使输入是完整的文档,也会失败并出现 {fatal_error,_, "Continuation function undefined, and more data needed",_,_} 错误。

    自有 ID: OTP-8213

  • startElement 元组中未加前缀的属性上提供的命名空间 URI 与默认命名空间的 URI 相同。根据标准,未加前缀的属性的命名空间应始终没有值。

    自有 ID: OTP-8214

Xmerl 1.2.1

修复的错误和故障

  • xmerl/include/xmerl.hrl 包含了内部调试宏(dbg/2DBG/0),现在已移至 xmerl_internal.hrl

    自身 ID:OTP-8084

  • 函数 xmerl_uri:parse/1 无法处理包含用户名和密码的 FTP URI。默认的 FTP 端口常量也是错误的。(感谢 Steve Vinoski)

    自身 ID:OTP-8156

改进和新功能

  • SAX 解析器无法处理同一流上的连续文档。现在的返回值已更改,它们返回一个剩余值,而不是给出关于“结束标记后存在错误信息”的错误。

    这意味着当解析正确时,函数 file/2stream/2 现在返回 {ok, EventState, Rest}。剩余值可以用作对 xmerl_sax_parse:stream/2 新调用的输入。如果知道只有一个文档,则结果元组中的剩余值可以根据输入是二进制形式还是非二进制形式与 <<>>[] 进行匹配。

    自身 ID:OTP-8153 辅助 ID:seq11388

Xmerl 1.2

改进和新功能

在 xmerl-1.2 中,我们添加了新 SAX 解析器(模块:xmerl_sax_parser)的第一个 Beta 版本,它支持 XML 1.0。我们称其为 Beta,原因是验证部分尚未准备就绪,并且解析器仍然存在一些已知的限制(主要在 DTD 区域)。

已知限制

  • 处理 DOCTYPE 声明中的外部 DTD,但不支持其他外部实体。
  • 在替换后,仅在结构中检查一般实体值。
  • 在标记声明级别支持已解析的实体(例如,不支持使用 PEReference 部分替换标记声明)。
  • 不支持外部 DTD 中的 conditionalSect。
  • 未检测到实体声明中的递归循环。

版本从 1.1.12 增加到 1.2,原因是新的解析器依赖于 OTP R13B 中添加的 Unicode 支持。旧的 xmerl 功能没有更改。

自身 ID:OTP-6635

Xmerl 1.1.12

改进和新功能

  • 更新了源文件中的版权声明

    自身 ID:OTP-7847

Xmerl 1.1.11

修复的错误和故障

  • 具有 complexType 和 simpleContent 的空元素未正确验证。此错误现已更正。

    自身 ID:OTP-7736

Xmerl 1.1.10

修复的错误和故障

  • 更改了自定义函数教程中的示例,以更正 Erlang 代码。

    自身 ID:OTP-6053

  • 解决了一些 XPath 错误,比较函数中的错别字 '!=', id() 函数中的错误。

    自身 ID:OTP-6792 辅助 ID:seq10570

  • 现在已实现 XPath 函数 contains()。请参阅 XPath 1.0 第 4.2 节。

    自身 ID:OTP-6873

  • 修复了使用 {xsdbase, Dirname} 时 xmerl_xsd:process_schema/2 失败并出现 enoent 错误以及 xmerl_xsd 参考手册中的一些文档错误。

    自身 ID:OTP-7165

  • 修复了 xmerl_scan 在内容中处理数字字符引用后跟 UTF-8 字符的问题。

    自身 ID:OTP-7430

  • 修复了 xmerl_scan:to_ucs/2 的不正确的 guard。

    自身 ID:OTP-7473

  • 对 xmerl XPath 实现进行了一些错误更正,大部分由 Matthew Dempsky 提供。

    自身 ID:OTP-7496

  • 现在,通过 string/0name(),所有 XPath 函数都已实现。name() 对 QName 的字符串表示形式为“{命名空间 URI}本地名称”。

    自身 ID:OTP-7510

Xmerl 1.1.9

修复的错误和故障

  • 一些小的扫描器故障已获得更清晰的错误消息。

    自身 ID:OTP-5998,辅助 ID:seq9803

  • 更正了 Xmerl 用户指南中的一个示例错误。

    自身 ID:OTP-6947

  • 当执行 xmerl_xsd:validate 时,状态中的 schema 表被删除,下次执行会失败。现在已更正此问题。

    自身 ID:OTP-7288

Xmerl 1.1.8

修复的错误和故障

  • 序列中的 Kleene 闭包子节点会消耗所有后续子节点。此问题已得到修复。

    自身 ID:OTP-7211

  • 现在可以验证 xhtml1-transitional.dtd。某些具有后续选择的 contentspec(与所有内容不匹配),后跟其他子元素,导致失败。现在已更正此问题。

    自身 ID:OTP-7214

Xmerl 1.1.7

改进和新功能

  • xmerl 的 schema 验证现在考虑了默认 facet

    自身 ID:OTP-7190

Xmerl 1.1.6

修复的错误和故障

  • 使用选项 {validation,schema} 解析 XML 的问题现在已得到纠正。

    自身 ID:OTP-6773

  • 现在支持 union 类型

    自身 ID:OTP-6877 辅助 ID:seq10755

  • 当序列具有存在的组员和后续元素时,现在 xmerl 按预期进行验证。

    自身 ID:OTP-6910

Xmerl 1.1.5

修复的错误和故障

  • substitutionGroup 的头部可能具有 anyType 类型,因此允许任何类型的成员。这是一个疏忽,但现在已得到纠正。

    自身 ID:OTP-6720

  • 重新定义中的递归组引用是指重新定义的 schema 中的定义。请参阅 XMLSchema 第 1 部分“Schema Representation Constraint: Individual Component Redefinition”第 4.2.2 节中的要点 2。

    自身 ID:OTP-6739

  • 解决了一些内容模型问题,例如在某些情况下,当存在多个选择时会失败。

    自身 ID:OTP-6752

Xmerl 1.1.4

改进和新功能

  • 简单语法可以使用其他格式:{Fun, State}。该 fun 应检索简单语法格式的替换。fun 的语义:fun(State) -> code that creates replacement, then returns {SimpleSyntax,NewState} | done

    自身 ID:OTP-6679

Xmerl 1.1.3

改进和新功能

  • 内存消耗降低:将从 utf-8 到 unicode 的转换从文档的额外传递移动到解析字符时。删除了 lists:subtract 的使用。这些更改还在某些情况下加快了解析速度。

    自身 ID:OTP-6599 辅助 ID:seq10552

Xmerl 1.1.2

修复的错误和故障

  • schema 处理器重新处理了已经处理过的 schema,在具有循环依赖关系的 schema 系统上使用 process_schemas。

    自身 ID:OTP-6460 辅助 ID:seq10564

改进和新功能

  • 现在已删除 Dialyzer 警告,即已删除死代码。

    自身 ID:OTP-6507

Xmerl 1.1.1

修复的错误和故障

  • 修复了 xmerl 中的错误,以便正确导出简单语法的元素内容。

    自身 ID:OTP-6402 辅助 ID:OTP-6099

Xmerl 1.1

修复的错误和故障

  • Xmerl 无法使用 sax_file 前端进行解析和导出。因此,在解析器中添加了 hook 函数调用,并更改了文本内容的处理方式。

    自身 ID:OTP-6043

  • 修复了 xmerl 中的错误,以便正确导出简单语法的元素内容。

    自身 ID:OTP-6099

改进和新功能

  • xmerl 现在支持 XMLSchema 验证。xmerl 参考手册中的文档。XMLSchema 验证的版本应视为 beta 版本。用户界面可能仍会在即将发布的版本中进行调整。欢迎提出意见和评估。

    自身 ID:OTP-6401

xmerl 1.0.5

修复的错误和故障

  • 已审查导致编译器警告的代码。

xmerl 1.0.4

修复的错误和故障

  • xmerl 在解析注释中带有版权符号的 XML 文档时行为异常。

    自身 ID:OTP-5599

  • 改进了 DTD 中错误消息的行计数,但由于 ENTITY 扩展仍然存在问题。在递归测试后未删除 digraphs。现在正确解析声明分隔符 [28a-b]。

    自身 ID:OTP-5718

  • 使用内容规范验证 XML 文件失败,该规范包含一个选择,其中一个元素是一个包含可选元素的序列,并且该序列的所有元素都缺失。

    自有 ID:OTP-5734

  • 文档根和属性的位置路径现在按预期工作。

    自有 ID:OTP-5895

  • 现在,XPATH 模块中的 last() 谓词具有 XPATH 规范第 2.4 章中指定的属性,即如果 last() 计算结果为非上下文位置的数字,则为假,否则为真。

    自有 ID:OTP-5902

  • 单个通配符的位置路径现在仅选择元素节点。

    自有 ID:OTP-5905

Xmerl 1.0.3

已修复的错误和故障

  • 删除了 xmerl_lib 中未定义函数的调用。

    自有 ID:OTP-5587

Xmerl 1.0.2

已修复的错误和故障

  • 更好地识别 XML 代码中的错误。

    自有 ID:OTP-5498 辅助 ID:seq9803

  • 修复了一些小错误。

    自有 ID:OTP-5500

  • 解析器将 PE 引用作为 EnumeratedType AttType 失败,现在已更正。

    自有 ID:OTP-5531

Xmerl 1.0.1

已修复的错误和故障

  • 修复了 xmerl_xpath 中的错误。选择 text() 类型节点的 Xpath 表达式不起作用,例如“context/text()”、“child::text()”、“descendant::text()”。

    自有 ID:OTP-5268 辅助 ID:seq9656

  • 修复了小错误。

    自有 ID:OTP-5301

Xmerl 1.0

改进和新功能

  • xmerl 1.0 的 OTP 版本与 http://sowap.sourceforge.net/ 的 xmerl-0.20 基本相同。它能够解析 XML 1.0。只有一些小的改进:一些导致在解析错误的 XML 时意外崩溃的错误。失败报告还会告诉哪个文件导致了错误。

    自有 ID:OTP-5174