Форум сайта python.su
0
Всех приветствую!
понадобилось распарсить xml файл, при помощи Expat, в стандартной доке пример применения:
import xml.parsers.expat
# 3 handler functions
def start_element(name, attrs):
print 'Start element:', name, attrs
def end_element(name):
print 'End element:', name
def char_data(data):
print 'Character data:', repr(data)
p = xml.parsers.expat.ParserCreate()
p.StartElementHandler = start_element
p.EndElementHandler = end_element
p.CharacterDataHandler = char_data
p.Parse("""<?xml version="1.0"?>
<parent id="top"><child1 name="paul">Text goes here</child1>
<child2 name="fred">More text</child2>
</parent>""", 1)
# create a subclass and override the handler methods
class MyParser(xml.parsers.expat.ParserCreate()):
def __init__(self):
path = ""
def StartElementHandler(self, tag, attrs):
print tag
# instantiate the parser and fed it some HTML
parser = MyParser()
parser.Parse(out)
Traceback (most recent call last):
File "D:\doorways\seo.py", line 13, in <module>
class MyParser(xml.parsers.expat.ParserCreate()):
TypeError: Error when calling the metaclass bases
cannot create 'pyexpat.xmlparser' instances
Для продолжения нажмите любую клавишу . . .
Офлайн
0
а это и не класс вовсе
from HTMLParser import HTMLParser
from xml.parsers.expat import ParserCreate
print type(HTMLParser)
print type(ParserCreate)
output:
<type 'classobj'>
<type 'builtin_function_or_method'>
from xml.parsers.expat import ParserCreate
class MyParser:
def __init__(self):
self.p = ParserCreate()
self.p.StartElementHandler = self.start_element
def start_element(self, tag, attrs):
print tag
def feed(self, data):
self.p.Parse(data, 1)
# instantiate the parser and fed it some HTML
parser = MyParser()
parser.feed(data)
Отредактировано lobster (Янв. 19, 2013 08:36:39)
Офлайн