Python SAX解析器如何处理字符?
我编写了一个解析XML文件的小代码,并希望打印它的字符,但每个字符似乎调用Python SAX解析器如何处理字符?,python,xml,Python,Xml,我编写了一个解析XML文件的小代码,并希望打印它的字符,但每个字符似乎调用characters()回调函数三次 代码: def characters(self,chrs): if self.flag==1: self.outfile.write(chrs+'\n') xml文件: <e1>9308</e1> <e2>865</e2> 9308 865 输出如下,许多空行 9308
characters()
回调函数三次
代码:
def characters(self,chrs):
if self.flag==1:
self.outfile.write(chrs+'\n')
xml文件:
<e1>9308</e1>
<e2>865</e2>
9308
865
输出如下,许多空行 9308 865 9308 865 我认为应该是: 9308 865 9308 865 为什么会有太空线?我阅读了文档信息: 字符(自我、内容) 接收字符数据的通知。 解析器将调用此方法来报告 字符数据SAX解析器可能返回所有连续的 字符数据在单个块中,或者他们可以将其拆分为 几块但是,任何单个 事件必须来自同一外部实体,以便 定位器提供有用的信息 那么SAX将把一个字符区域处理为几个片段?然后回几次电话 那么SAX将把一个字符区域处理为几个片段?然后回几次电话 这显然发生在你的案件中——有疑问吗
但是您的问题描述很糟糕,因为您没有提到您正使用的是哪种解析器。您发布的示例XML显然不是完整的XML,因为它的格式不正确(SAX解析器会告诉您这一点,而不是生成您的输出)。因此,我假设XML的内容比您向我们展示的要多 您需要知道,任何XML元素之间的每一个空格都是字符数据。所以如果你有类似的东西:
<foo>
<bar>123</bar>
</foo>
123
然后您至少有3个文本节点:一个包含
“\n”
(即一个换行符,两个空格字符),一个包含“123”
,最后一个但不是至少一个包含“\n”
(即仅一个换行符)。使用self.outfile.write(chrs+'\n'))
您没有机会确切地看到正在发生的事情
尝试self.outfile.write(“Chrs:%r\n”%Chrs)
查找内置函数
repr()
<代码>%r“%foo产生与repr(foo)
相同的结果;这两种构造在错误消息和调试时都非常有用。hi,我使用xml.sax.handler.ContentHandler作为我的handler,这是原因吗?如何获得纯字符?输出如下,许多空行。我想应该是这样的:谢谢,我知道现在发生了什么。我将手动删除空格。