简体   繁体   中英

How can I read a single XML item

I tried using this example from this tutorial(Here's a link ):

#!/usr/bin/python

import xml.sax

class MovieHandler( xml.sax.ContentHandler ):
   code........
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")

which gives this result as an output:

*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Year: 2003
Rating: PG
Stars: 10
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Year: 1989
Rating: R
Stars: 8
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Stars: 10
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Stars: 2
Description: Viewable boredom

Supposing i want only this results:

*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Year: 2003
Rating: PG
Stars: 10

OR THIS

****Movie*****
    Title: Enemy Behind
    Type: War, Thriller
    Rating: PG
    Stars: 10

What can i do differently? I just started learning python & XML recently:

This kind of thing is can be done by parsing the XML to create a DOM tree, then you can query at random-access pretty easily.

For example, to print the movie with the title "Enemy, Behind" you could do something like this:

#!/usr/bin/python

from xml.dom.minidom import parse
import xml.dom.minidom

# Open XML document using minidom parser
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
    print "Root element : %s" % collection.getAttribute("shelf")

# Get all the movies in the collection
movies = collection.getElementsByTagName("movie")

# Print detail of each movie.
for movie in movies:
    title = movie.getAttribute("title")
    if title == "Enemy Behind":
         print "*****Movie*****"
         print "Title: %s" % title

         type = movie.getElementsByTagName('type')[0]
         print "Type: %s" % type.childNodes[0].data
         format = movie.getElementsByTagName('format')[0]
         print "Format: %s" % format.childNodes[0].data
         rating = movie.getElementsByTagName('rating')[0]
         print "Rating: %s" % rating.childNodes[0].data
         description = movie.getElementsByTagName('description')[0]
         print "Description: %s" % description.childNodes[0].data

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM