SAX解析器如何处理字符?

use*_*und 6 python xml

我编写了一些代码来解析XML文件,并希望打印它的字符,但每个字符似乎都会调用characters()三次回调函数.

码:

def characters(self,chrs):
            if self.flag==1:
                    self.outfile.write(chrs+'\n')
Run Code Online (Sandbox Code Playgroud)

xml文件:

<e1>9308</e1>
<e2>865</e2>
Run Code Online (Sandbox Code Playgroud)

输出如下,很多空行.


9308


865

我认为它应该像:

9308

865

为什么有空间线?我读了文档信息:

人物(自我,内容)

接收字符数据的通知.解析器将调用此方法来报告每个字符数据块.SAX解析器可以在一个块中返回所有连续的字符数据,或者它们可以将它分成几个块; 但是,任何单个事件中的所有字符都必须来自同一个外部实体,以便Locator提供有用的信息.

所以SAX会将一个字符区域作为几个片段处理?和回调几次?

Joa*_*uer 4

您发布的示例 XML 显然不是完整的 XML,因为这可能是格式错误的(并且 SAX 解析器会告诉您这一点,而不是生成输出)。因此,我假设 XML 的内容比您向我们展示的更多。

您需要注意任何 XML 元素之间的每个空格都是字符数据。所以如果你有类似的事情:

<foo>
  <bar>123</bar>
</foo>
Run Code Online (Sandbox Code Playgroud)

那么你至少有 3 个文本节点:一个包含"\n "(即一个换行符,两个空格字符),一个包含"123",最后但并非最不重要的是另一个包含"\n"(即只是一个换行符)。