我一直在寻找这个答案。我可以找到的所有创建自定义XML解析器的示例(例如在docs,this example或this question或this question中)都讨论了生成全新数据(例如XML的深度,或CSV等价物。)
但是,我想要做的就是拦截解析,检查数据,可能改变它,然后让解析器继续。
我试过这个,作为玩具的例子:
from xml.etree import ElementTree as ET
class myParser():
def start(self, tag, data):
##### Pretty sure this is wrong, but what should it be? #####
return ET.XMLParser.start(tag, data)
def data(self, data):
return ET.XMLParser.data(data.replace('"', '"'))
def end(self, tag):
return ET.XMLParser.end(tag)
def close(self):
return ET.XMLParser.close()
def parseFile(fileName):
p = ET.XMLParser(target=myParser)
tree = ET.parse(fileName, parser=p)
但我正在
TypeError: 'unbound method start() must be called with myParser instance as first argument (got str instance instead)'
我觉得我很接近,但我错过了一些我无法看到的难题中的重要部分。