如何使用Python的elementtree处理空白?

Yur*_*rim 6 python xml whitespace xsd elementtree

问题:

当空白无关紧要时,表示可能非常重要.

说明:

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

第4.3.6节末尾有一个注释:

这里使用的符号#xA(以及本说明书中的其他地方)表示通用字符集(UCS)代码点十六进制A(换行),其由U + 000A表示.此表示法与 区别开来,它是对同一UCS代码点的XML字符引用.

例:

如果元素elem的数据类型具有空格约束折叠,则"<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编辑已经意识到这种困境并故意不会阻止它.

小智 3

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