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

时间:2013-06-07 01:36:13

标签: python xml xsd whitespace elementtree

问题:

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

说明:

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>&#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编辑已经意识到这种困境并故意不会阻止它。

1 个答案:

答案 0 :(得分:3)

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