Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SAX解析器如何处理字符?_Python_Xml - Fatal编程技术网

Python SAX解析器如何处理字符?

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

我编写了一个解析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 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,这是原因吗?如何获得纯字符?输出如下,许多空行。我想应该是这样的:谢谢,我知道现在发生了什么。我将手动删除空格。