Python and XML Help

John Machin sjmachin at lexicon.net
Wed Apr 15 02:09:47 EDT 2009


On Apr 15, 2:25 pm, ookrin <ook... at gmail.com> wrote:
>
>
> Seeing the errors - I changed the two classes to this:
>
> class offlineLoad():
>     def loadXmlFile(self):
>         print "Loading from File"
>         xf = open('CharacterID.xml','r')
>         xml = xmlHandler()
>         saxparser = make_parser()
>         saxparser.setContentHandler(xml)
>
>         saxparser.parse(xf)
>
> class xmlHandler(ContentHandler):
>     def __init__(self):
>         print "---"
>         self.idList = []
>
>     def startElement(self, name, attrs):
>         if name == "row":
>             charName = attrs.get("name", "")
>             charID = attrs.get("characterID", "")
>             self.buildlist(charName,charID)
>
>     def buildlist(self,charName,charID):
>         temp = charName,charID
>         self.idList.append(temp)
>         print "----"
>         print self.idList
>
> I know calling the self.idList = [] in the init probably isn't
> correct, but I couldn't think of any other way currently so it doesn't
> get rebuilt every time the definition gets called. This works and at
> least I think it puts everything into an array for me.

AFAICT having self.idList = [] in the __init__ method is the only
sensible way to do what you want. Non-sensible ways: make it global to
the module, or local to a class method

You do have a problem with what you've got so far: you've done the
heist, you've stuffed the loot into a sack, but where's the getaway
car? IOW your loadXmlFile method needs a line like

   return xml.idList

Wouldn't loadXMLFile be better as a stand-alone function? A class
which is not a subclass of anything more meaty than object and has
only one method (which isn't __init__) smells strongly of excess
reliance on paradigms best left behind with the language from which
you acquired them :-)

Cheers,
John



More information about the Python-list mailing list