Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Python

Python - Pemrosesan XML

Halaman SebelumnyaHalaman Berikutnya

XML adalah bahasa open source portabel yang memungkinkan pemrogram mengembangkan aplikasi yang dapat dibaca oleh aplikasi lain, terlepas dari sistem operasi dan/atau bahasa pengembangan.

Apa itu XML?

Extensible Markup Language (XML) adalah bahasa markup seperti HTML atau SGML. Ini direkomendasikan oleh World Wide Web Consortium dan tersedia sebagai standar terbuka.

XML sangat berguna untuk melacak data dalam jumlah kecil hingga menengah tanpa memerlukan tulang punggung berbasis SQL.

Arsitektur dan API Parser XML

Pustaka standar Python menyediakan serangkaian antarmuka yang minimal namun berguna untuk bekerja dengan XML.

Dua API yang paling dasar dan digunakan secara luas untuk data XML adalah antarmuka SAX dan DOM.

SAX jelas tidak dapat memproses informasi secepat DOM ketika bekerja dengan file besar. Di sisi lain, menggunakan DOM secara eksklusif dapat benar-benar mematikan sumber daya Anda, terutama jika digunakan pada banyak file kecil.

SAX bersifat read-only, sedangkan DOM memungkinkan perubahan pada file XML. Karena kedua API yang berbeda ini benar-benar saling melengkapi, tidak ada alasan mengapa Anda tidak dapat menggunakan keduanya untuk proyek besar.

Untuk semua contoh kode XML, mari gunakan file XML sederhana movies.xml sebagai masukan

<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>

Mengurai XML dengan SAX API

SAX adalah antarmuka standar untuk penguraian XML yang digerakkan oleh peristiwa. Parsing XML dengan SAX umumnya mengharuskan Anda untuk membuat ContentHandler Anda sendiri dengan mensubklasifikasikan xml.sax.ContentHandler.

ContentHandler . Anda menangani tag dan atribut tertentu dari rasa XML Anda. Objek ContentHandler menyediakan metode untuk menangani berbagai peristiwa penguraian. Parser miliknya memanggil metode ContentHandler saat mem-parsing file XML.

Metode startDocument dan endDocument dipanggil di awal dan akhir file XML. Metode karakter(teks) dilewatkan data karakter file XML melalui teks parameter.

ContentHandler dipanggil di awal dan akhir setiap elemen. Jika parser tidak dalam mode namespace, metode startElement(tag, atribut) dan endElement(tag) disebut; jika tidak, metode yang sesuai startElementNS dan endElementNS disebut. Di sini, tag adalah tag elemen, dan atribut adalah objek Atribut.

Berikut adalah metode penting lainnya untuk dipahami sebelum melanjutkan −

make_parser Metode

Metode berikut membuat objek parser baru dan mengembalikannya. Objek parser yang dibuat akan menjadi jenis parser pertama yang ditemukan sistem.

xml.sax.make_parser( [parser_list] )

Berikut adalah detail dari parameter

mengurai Metode

Metode berikut membuat parser SAX dan menggunakannya untuk mengurai dokumen.

xml.sax.parse( xmlfile, contenthandler[, errorhandler])

Berikut adalah detail dari parameter

parseString Metode

Ada satu metode lagi untuk membuat parser SAX dan mengurai string XML specified yang ditentukan .

xml.sax.parseString(xmlstring, contenthandler[, errorhandler])

Berikut adalah detail dari parameter

Contoh

#!/usr/bin/python

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")

Ini akan menghasilkan hasil berikut

*****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

Untuk detail lengkap tentang dokumentasi SAX API, silakan merujuk ke Python SAX API standar.

Mengurai XML dengan DOM API

Document Object Model ("DOM") adalah API lintas bahasa dari World Wide Web Consortium (W3C) untuk mengakses dan memodifikasi dokumen XML.

DOM sangat berguna untuk aplikasi akses acak. SAX hanya memungkinkan Anda melihat satu bit dokumen pada satu waktu. Jika Anda melihat satu elemen SAX, Anda tidak memiliki akses ke elemen lainnya.

Berikut adalah cara termudah untuk memuat dokumen XML dengan cepat dan membuat objek minidom menggunakan modul xml.dom. Objek minidom menyediakan metode parser sederhana yang dengan cepat membuat pohon DOM dari file XML.

Frase contoh memanggil fungsi parse( file [,parser] ) dari objek minidom untuk mengurai file XML yang ditunjuk oleh file ke dalam objek pohon DOM.

#!/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:
   print "*****Movie*****"
   if movie.hasAttribute("title"):
      print "Title: %s" % movie.getAttribute("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

Ini akan menghasilkan hasil berikut

Root element : New Arrivals
*****Movie*****
Title: Enemy Behind
Type: War, Thriller
Format: DVD
Rating: PG
Description: Talk about a US-Japan war
*****Movie*****
Title: Transformers
Type: Anime, Science Fiction
Format: DVD
Rating: R
Description: A schientific fiction
*****Movie*****
Title: Trigun
Type: Anime, Action
Format: DVD
Rating: PG
Description: Vash the Stampede!
*****Movie*****
Title: Ishtar
Type: Comedy
Format: VHS
Rating: PG
Description: Viewable boredom

Untuk detail lengkap tentang dokumentasi DOM API, silakan merujuk ke Python DOM API standar.


Python

  1. Tipe Data Python
  2. Operator Python
  3. Pernyataan lulus python
  4. Argumen Fungsi Python
  5. Kamus Python
  6. Python Iterator
  7. Penutupan Python
  8. Tanggal waktu Python
  9. Python tidur()
  10. Python - Ikhtisar