Εχω το ακόλουθο xml αρχειο
<chapter title="Twilight">
<sub-chapter>intro</sub-chapter>
<sub-chapter>mina harker</sub-chapter>
</chapter>
</Book>
</Collection>
και προσπαθώ να το διαβάσω με ένα πρόγραμμα σε python χρησιμοποιώντας το sax module(xml.sax
from xml.sax.handler import ContentHandler
from xml.sax import make_parser
class myXmlHandler(ContentHandler):
inBook = 0
inTitle = 0
inAuthor = 0
inPublisher = 0
inType = 0
inChapter = 0
insubChapter = 0
chapTitle = ''
def startElement(self,name, attrs):
if name == "Book":
print "Turning on book flag"
self.inBook = 1
elif name == "title":
print "Turning on title flag"
self.inTitle = 1
elif name == "author":
print "Turning on author flag"
self.inAuthor = 1
elif name == "publisher":
print "Turning on publisher flag"
self.inPublisher =1
elif name == "type":
print "Turning on type flag"
self.inType = 1
elif name == "chapter":
print "Turning on chapter flag"
self.inChapter = 1
self.chapTitle = attrs.get("title","")
elif name == "sub-chapter":
print "Turning on sub-chapter flag"
#self.inChapter = 0
self.insubChapter = 1
print "Chapter flag turned off"
def characters(self, characters):
if self.inTitle:
print "Title of the book is: "+characters
elif self.inAuthor:
print "Author: "+characters
elif self.inPublisher:
print "Publisher: "+ characters
elif self.inType:
print "Type"+characters
elif self.inChapter:
if self.insubChapter:
print "Sub-chapter Title: " + characters
else:
print "Chapter Title" + self.chapTitle
def endElement(self,name):
if name == "Book":
print "Turning off book flag"
self.inBook = 0
elif name == "title":
print "Turning off title flag"
self.inTitle = 0
elif name == "author":
print "Turning off author flag"
self.inAuthor = 0
elif name == "publisher":
print "Turning off publisher flag"
self.inPublisher =0
elif name == "type":
print "Turning off type flag"
self.inType = 0
elif name == "chapter":
print "Turning off chapter flag"
self.inChapter = 0
elif name == "sub-chapter":
print "Turning off sub-chapter flag"
self.insubChapther = 0
if __name__ == "__main__":
ch = myXmlHandler( )
saxparser = make_parser( )
saxparser.setContentHandler(ch)
saxparser.parse("Collection.xml")
</code>
Το θέμα είναι ότι στην εκτύπωση του κειμένου ανάμεσα στα tags μου βγάζει αυτό το περίεργο αποτέλεσμα
Turning on book flag
Turning on title flag
Title of the book is: Dracula
Turning off title flag
Turning on author flag
Author: Brahm Stocker
Turning off author flag
Turning on publisher flag
Publisher: New England Publishing org.
Turning off publisher flag
Turning on type flag
TypeNovell
Turning off type flag
Turning on chapter flag
Chapter TitleTwilight
Turning on sub-chapter flag
Chapter flag turned off
Sub-chapter Title: intro
Turning off sub-chapter flag
Sub-chapter Title:
Turning on sub-chapter flag
Chapter flag turned off
Sub-chapter Title: mina harker
Turning off sub-chapter flag
Sub-chapter Title:
Turning off chapter flag
Turning off book flag
δηλαδή αν παρατηρείστε διαβάζει και εκτυπώνει κενό κείμενο στο sub-chapter tag...Τι ακριβώς είναι λάθος?
sorry για την κακή μορφοποιηση κάτι έκανα λάθος
- Συνδεθείτε ή εγγραφείτε για να σχολιάσετε
Σχόλια
Απ' όσο ξέρω η Python τυπώνει με τη μορφή print ("...")
Θέλει δηλαδή τις παρενθέσεις.
Ετσι όπως το έχεις σου "πετάει" το script στην οθόνη κι όχι τα αποτελέσματα του script.
Το κενό μπορεί να οφείλεται στο οτι δεν βρίσκει κάποιο title, ή μπορεί να βρίσκει κάποιον χαρακτήρα που να του ορίζει να αφήσει μια γραμμή.
Η python τυπωνει το αποτελεσμα με print "Hello" και με print ("Hello from parenthesis")
Δες το παρακατω...
gkapel@thundercats:~$ cat test.py
print "Hello\n"
print ("Hello from Parenthesis")
gkapel@thundercats:~$ python test.py
Hello
Hello from Parenthesis
gkapel@thundercats:~$
Κατι αλλο εχει κανει λαθος αλλα δεν μπωρο να το βρω.
http://s3.battleknight.gr/index.php?loc=hire&ref=NTI4OTY=
[oprime@dexter]$uname -a | awk '{print $1, "on the ROCKS"}' | sed -e 's/on\ the\
Κατ' αρχάς να πω οτι αυτή τη στιγμή τρέχω την Python απο Windows κι όχι από Linux.
Εμένα δεν μου τρέχει χωρίς τις παρενθέσεις αλλά δεν είμαι και πολύ έμπειρος στην Python οπότε πάσσο.
Αν τρέχεις Python 3.** τότε θέλεις παρενθέσεις , αλλιώς ( στις εκδόσεις 2.* ) δεν χρειάζονται.
Ορθογραφικό !!
Στο τέλος της def endElement(
έχεις γράψει insubChapther αντί για insubChapter