I've recently started to learn how to use python to parse xml files. I took the tutorial from http://pyxml.sourceforge.net/topics/howto/node12.html
When I run the following code I get the error:
Traceback (most recent call last):
File "C:\Users\Name\Desktop\pythonxml\tutorials\pythonxml\pyxml sourceforge\5.1 Comic Colection\SearchForComic.py", line 30, in -toplevel-
dh = FindIssue('sandman', '62')
TypeError: __init__() takes exactly 1 argument (3 given)
code:
from xml.sax import saxutils
class FindIssue(saxutils.DefaultHandler):
def __init___(self, title, number):
self.search_title, self.search_number = title, number
def startElement(self, name, attrs):
#if it's not a comic element, ignore it
if name!= 'comic': return
# look for the title and number sttributes (see text)
title = attrs.get('title', None)
number = attrs.get('number', None)
if (title == self.search_title and
number == self.search_number):
print title, '#' +str (number), 'found'
from xml.sax import make_parser
from xml.sax.handler import feature_namespaces
if __name__ == '__main__':
#Create a parser
parser = make_parser()
#tell the parser that we are not interested in XML namespaces
parser.setFeature(feature_namespaces, 0)
#create the handler
dh = FindIssue('sandman', '62')
#tell the parse to use our handler
parser.setContentHandler(dh)
#parse the input
parser.parse('collection.xml')
also on the last line I'm passing the file its in the current working directory is this the correct way to address the file?
You've got too many _ in the name of _init_. The declaration of your constructor should be:
def __init__(self, title, number):
not:
def __init___(self, title, number):
Note the extra underscore symbol.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With