6

问题:

当空白不重要时,表示可能非常重要。

解释:

XML Schema Part 2: Datatypes Second Edition中,约束 facet whiteSpace是为从字符串( http://www.w3.org/TR/xmlschema-2/#rf-whiteSpace )派生的类型定义的。如果此whiteSpace facet 被替换折叠,则值可能会在规范化期间更改。

第 4.3.6 节末尾有一个注释:

此处(以及本规范的其他地方)使用的符号 #xA 表示通用字符集 (UCS) 代码点十六进制 A(换行符),由 U+000A 表示。此表示法与 不同,后者是对同一 UCS 代码点的 XML 字符引用。

例子:

如果元素elem的数据类型具有空格约束collapse"<elem> text </elem>"则应变为("text"删除前导和尾随空格),但应变为(未删除由字符引用编码的空格)。"<elem>&#x20;text&#x20;</elem>"" text "

问题:

因此,解析器/树构建器要么处理这种规范化,要么在之后完成。

  • 知情解析:
    • 我在哪里向解析器或树生成器提供有关如何规范化某些 XML 元素的信息?
    • 有没有类似的东西set_whitespace_normalization('./country/neighbor', 'collapse')
    • normalize(content)解析器或树生成器中是否有钩子?
  • 后期处理
    • 如何访问某些元素的原始内容?
    • 是否有elem.original_text可能返回“ &#x20;text&#x20;”?
    • 是否有elem.unnormalized_text可能返回“  text ”?

我想使用 Python 的 xml.etree.ElementTree,但我会考虑任何其他可以完成这项工作的 XML 库。

免责声明:

当然,声明空白无关紧要(替换折叠)然后通过使用字符引用来作弊是不好的风格。在大多数情况下,应更改数据或模式以防止这种情况发生,但有时您必须使用外部 XML 模式外部 XML 文档。上面引用的注释的绝对存在表明 XML 编辑器意识到了这种困境,并且故意不阻止它。

4

1 回答 1

3

这似乎是 xml.etree.ElementTree 中的一个已知错误:http: //bugs.python.org/issue17582。根据该错误报告,这在 lxml.etree 中得到了正确处理:https ://pypi.python.org/pypi/lxml/ 。

于 2014-02-25T15:55:54.920 回答