当空白无关紧要时,表示可能非常重要。
在 XML架构第2部分:数据类型第二版中,为 string (http://www.w3.org/TR/xmlschema-2/#rf-whiteSpace派生的类型定义了约束方面 whiteSpace )。如果此 whiteSpace 构面替换或折叠,则可能会在normalization期间更改该值。
Section 4.3.6末尾有一个注释:
此处使用的符号#xA(以及本规范中的其他地方) 表示通用字符集(UCS)代码点十六进制A. (换行),用U + 000A表示。这种表示法是 区别于& #xA;,这是对它的XML字符引用 相同的UCS代码点。
如果元素 elem 的数据类型具有空白约束折叠,则"<elem> text </elem>"
应变为"text"
(删除了前导和尾随空格),但"<elem> text </elem>"
应该变为" text "
(未删除字符引用编码的空格)。
因此,解析器/树构建器可以处理此规范化,也可以在之后完成。
set_whitespace_normalization('./country/neighbor', 'collapse')
的内容吗?normalize(content)
的钩子?elem.original_text
,可能会返回“ text 
”?elem.unnormalized_text
,可能会返回“text
”?我想使用Python的xml.etree.ElementTree,但我会考虑任何其他XML库来完成这项工作。
当然,声明空白无效(替换或崩溃)然后使用字符引用作弊是不好的风格。在大多数情况下,应该更改数据或模式以防止这种情况,但有时您必须使用外部XML模式和外部XML文档。上面引用的注释的纯粹存在表明XML编辑已经意识到这种困境并故意不会阻止它。
答案 0 :(得分:3)
这似乎是xml.etree.ElementTree中的已知错误:http://bugs.python.org/issue17582。根据该错误报告,这在lxml.etree中正确处理:https://pypi.python.org/pypi/lxml/。