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

2024-06-06 22:43:56 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:

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

说明:

在xmlschema第2部分:Datatypes第二版中,约束方面空白是为派生自stringhttp://www.w3.org/TR/xmlschema-2/#rf-whiteSpace)的类型定义的。如果这个空白方面是替换折叠,则值可能在normalization期间更改。在

Section 4.3.6结尾处有一个注释:

The notation #xA used here (and elsewhere in this specification) represents the Universal Character Set (UCS) code point hexadecimal A (line feed), which is denoted by U+000A. This notation is to be distinguished from 
, which is the XML character reference to that same UCS code point.

示例:

如果一个元素的数据类型有一个空白约束折叠"<elem> text </elem>"应该变成"text"(删除了前导和尾随的空白),但是"<elem>&#x20;text&#x20;</elem>"应该变成{}(由字符引用编码的空白未删除)。在

问题:

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

  • 知情分析:
    • 我在哪里向解析器或树生成器提供有关如何规范化某些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编辑器意识到了这一困境,并没有刻意阻止它。在


Tags: thetext解析器元素iscodexml空白