我编写了一些代码来解析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会将一个字符区域作为几个片段处理?和回调几次?
您发布的示例 XML 显然不是完整的 XML,因为这可能是格式错误的(并且 SAX 解析器会告诉您这一点,而不是生成输出)。因此,我假设 XML 的内容比您向我们展示的更多。
您需要注意任何 XML 元素之间的每个空格都是字符数据。所以如果你有类似的事情:
<foo>
<bar>123</bar>
</foo>
Run Code Online (Sandbox Code Playgroud)
那么你至少有 3 个文本节点:一个包含"\n "(即一个换行符,两个空格字符),一个包含"123",最后但并非最不重要的是另一个包含"\n"(即只是一个换行符)。