Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.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 XMLParser:何时调用data()方法_Python_Elementtree - Fatal编程技术网

Python XMLParser:何时调用data()方法

Python XMLParser:何时调用data()方法,python,elementtree,Python,Elementtree,我正在学习Python,对xml解析器(ElementTree-XMLParser)的行为有一些难以理解的地方 我修改了中的示例 class MaxDepth:#解析器的目标对象 path=“” def start(self、tag、attrib):#为每个开始标记调用。 self.path+=“/”+标记 打印'>>>输入-'+self.path def end(self,tag):#为每个结束标记调用。 如果要修改数据方法,请打印“: def data(self, data): if

我正在学习Python,对xml解析器(ElementTree-XMLParser)的行为有一些难以理解的地方

我修改了中的示例

class MaxDepth:#解析器的目标对象
path=“”
def start(self、tag、attrib):#为每个开始标记调用。
self.path+=“/”+标记
打印'>>>输入-'+self.path
def end(self,tag):#为每个结束标记调用。

如果要修改数据方法,请打印“:

def data(self, data):
    if data:
        print '... data called ...'
        print repr(data), 'length -' , len(data)
您将看到为什么对data方法有多个调用;标记之间的每行文本数据都会调用它:

>>> Entering - /a
... data called ...
'\n' length - 1
... data called ...
'  ' length - 2
>>> Entering - /a/b
... data called ...
'\n' length - 1
... data called ...
'  ' length - 2
<<< Leaving - /a/b
... data called ...
'\n' length - 1
... data called ...
'  ' length - 2
>>> Entering - /a/b
... data called ...
'\n' length - 1
... data called ...
'    ' length - 4
# ... etc ...
>>输入-/a
... 数据称为。。。
“\n”长度-1
... 数据称为。。。
“”长度-2
>>>输入-/a/b
... 数据称为。。。
“\n”长度-1
... 数据称为。。。
“”长度-2
>输入-/a/b
... 数据称为。。。
“\n”长度-1
... 数据称为。。。
“”长度-4
# ... 等
XMLParser方法基于解析器


根据我的经验,任何流式XML解析器都会将文本数据视为一系列块,您必须将任何和所有数据事件连接在一起,直到遇到下一个starttag或endtag事件。解析器通常会在空白边界处分解块,但这不是给定的。

如果您的使用不需要事件解析,则使用
.parse()更容易。
。否则,他的事件示例可能会有所帮助:
def data(self, data):
    if data:
        print '... data called ...'
        print repr(data), 'length -' , len(data)
>>> Entering - /a
... data called ...
'\n' length - 1
... data called ...
'  ' length - 2
>>> Entering - /a/b
... data called ...
'\n' length - 1
... data called ...
'  ' length - 2
<<< Leaving - /a/b
... data called ...
'\n' length - 1
... data called ...
'  ' length - 2
>>> Entering - /a/b
... data called ...
'\n' length - 1
... data called ...
'    ' length - 4
# ... etc ...