问题:
当空白不重要时,表示可能非常重要。
解释:
在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> text </elem>"
" text "
问题:
因此,解析器/树构建器要么处理这种规范化,要么在之后完成。
- 知情解析:
- 我在哪里向解析器或树生成器提供有关如何规范化某些 XML 元素的信息?
- 有没有类似的东西
set_whitespace_normalization('./country/neighbor', 'collapse')
? normalize(content)
解析器或树生成器中是否有钩子?
- 后期处理
- 如何访问某些元素的原始内容?
- 是否有
elem.original_text
可能返回“ text 
”? - 是否有
elem.unnormalized_text
可能返回“text
”?
我想使用 Python 的 xml.etree.ElementTree,但我会考虑任何其他可以完成这项工作的 XML 库。
免责声明:
当然,声明空白无关紧要(替换或折叠)然后通过使用字符引用来作弊是不好的风格。在大多数情况下,应更改数据或模式以防止这种情况发生,但有时您必须使用外部 XML 模式和外部 XML 文档。上面引用的注释的绝对存在表明 XML 编辑器意识到了这种困境,并且故意不阻止它。