2017-11-28 1 views
0
import xml.sax 

class MovieHandler(xml.sax.ContentHandler): 
    def __init__(self): 
     self.CurrentData = "" 
     self.type = "" 
     self.format = "" 
     self.year = "" 
     self.rating = "" 
     self.stars = "" 
     self.description = "" 

    # Call when an element starts 
    def startElement(self, tag, attributes): 
     self.CurrentData = tag 
     if tag == "movie": 
     print ("*****Movie*****") 
     title = attributes["title"] 
     print ("Title:", title) 

    # Call when an elements ends 
    def endElement(self, tag): 
     if self.CurrentData == "type": 
     print ("Type:", self.type) 
     elif self.CurrentData == "format": 
     print ("Format:", self.format) 
     elif self.CurrentData == "year": 
     print ("Year:", self.year) 
     elif self.CurrentData == "rating": 
     print ("Rating:", self.rating) 
     elif self.CurrentData == "stars": 
     print ("Stars:", self.stars) 
     elif self.CurrentData == "description": 
     print ("Description:", self.description, 
     self.CurrentData = "") 

    # Call when a character is read 
    def characters(self, content): 
     if self.CurrentData == "type": 
     self.type = content 
     elif self.CurrentData == "format": 
     self.format = content 
     elif self.CurrentData == "year": 
     self.year = content 
     elif self.CurrentData == "rating": 
     self.rating = content 
     elif self.CurrentData == "stars": 
     self.stars = content 
     elif self.CurrentData == "description": 
     self.description = content 

if (__name__ == "__main__"): 

    # create an XMLReader 
    parser = xml.sax.make_parser() 
    # turn off namepsaces 
    parser.setFeature(xml.sax.handler.feature_namespaces, 0) 

    # override the default ContextHandler 
    Handler = MovieHandler() 
    parser.setContentHandler(Handler) 

    parser.parse("movies.xml") 

Ausgang:Python XML-Verarbeitung

File "<ipython-input-3-17fac27d02c1>", line 35 
    self.CurrentData = "") 
    ^
SyntaxError: keyword can't be an expression 

movies.xml

<?xml version="1.0"?> 

-<collection shelf="New Arrivals"> 


-<movie title="Enemy Behind"> 

<type>War, Thriller</type> 

<format>DVD</format> 

<year>2003</year> 

<rating>PG</rating> 

<stars>10</stars> 

<description>Talk about a US-Japan war</description> 

</movie> 


-<movie title="Transformers"> 

<type>Anime, Science Fiction</type> 

<format>DVD</format> 

<year>1989</year> 

<rating>R</rating> 

<stars>8</stars> 

<description>A schientific fiction</description> 

</movie> 


-<movie title="Trigun"> 

<type>Anime, Action</type> 

<format>DVD</format> 

<episodes>4</episodes> 

<rating>PG</rating> 

<stars>10</stars> 

<description>Vash the Stampede!</description> 

</movie> 


-<movie title="Ishtar"> 

<type>Comedy</type> 

<format>VHS</format> 

<rating>PG</rating> 

<stars>2</stars> 

<description>Viewable boredom</description> 

</movie> 

</collection> 

Ich bin neu in Python und Python 3 kernal in Jupyter Notebook (Anaconda Distribution). Ich bekomme diesen Fehler beim Versuch, diese XML-Datei in Python zu analysieren. Es nimmt nicht "selbst" als Schlüsselwort. Kann mir jemand sagen, welchen Fehler ich hier mache? Lass mich auch wissen, was diese "self.CurrentData" machen wird?

Antwort

0

Das Problem ist nicht self, aber die Zuordnung in der print Methode.

print ("Beschreibung:" self.description, self.CurrentData = "")

Sie müssen diese in zwei Linien tun:

print ("Description:", self.description, self.CurrentData) 
self.CurrentData = "" 

Es sei denn, Sie wollen keine Aufgabe machen - zumindest würde es sich von all Ihren anderen if/else-Blöcken unterscheiden.