Python XMLParser:何时调用data()方法
我正在学习Python,对xml解析器(ElementTree-XMLParser)的行为有一些难以理解的地方 我修改了中的示例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
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 ...