Latest web development tutorials

Python3 XML parsing

Apa XML?

XML mengacu pada extensible markup language(e X tensible M arkup L anguage), sebuah subset dari Standard Generalized Markup Language, adalah metode untuk menandai dokumen elektronik memiliki bahasa markup terstruktur. Anda dapat belajar melalui situs ini XML Tutorial

XML dirancang untuk mengirim dan menyimpan data.

XML adalah seperangkat aturan untuk menentukan semantik tag, tag ini akan mendokumentasikan dibagi menjadi banyak bagian dan bagian-bagian ini untuk diidentifikasi.

Ini juga merupakan bahasa meta-markup yang mendefinisikan sintaks dari bahasa yang digunakan untuk mendefinisikan, semantik, terstruktur bahasa markup domain-spesifik lainnya.


python untuk parsing XML

DOM umum dan XML pemrograman antarmuka SAX, dua antarmuka yang berbeda dengan XML file cara, tentu saja, penggunaan kesempatan yang berbeda.

Ada tiga cara python parsing XML, SAX, DOM, dan ElementTree:

1.SAX (API sederhana untuk XML)

python perpustakaan standar berisi SAX parser, SAX dengan model-event, dipicu oleh salah satu acara dalam proses parsing XML dan memanggil fungsi callback yang ditetapkan pengguna untuk menangani file XML.

2.DOM (Document Object Model)

Data XML parsing ke pohon di memori, yang beroperasi melalui pohon untuk memanipulasi XML.

Gunakan bagian ini untuk sebuah movies.xml XML contoh dokumen berbunyi sebagai berikut:

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

python xml parsing menggunakan SAX

SAX adalah API-event.

Gunakan SAX parsing dokumen XML melibatkan dua bagian: parser dan event handler.

parser bertanggung jawab untuk membaca dokumen XML, dan mengirimkan event event, seperti elemen mulai dengan acara elemen akhir;

Event handler bertanggung jawab untuk acara sesuai, transfer data XML untuk diproses.

  • 1, pengolahan file besar;
  • 2, hanya sebagian dari isi file, atau hanya untuk mendapatkan informasi dari file tersebut.
  • 3, ingin membangun model objek mereka sendiri dari waktu.

Gunakan sax xml.sax cara xml pertama kali diperkenalkan pada fungsi parse, serta xml.sax.handler ContentHandler di python.

metode kelas ContentHandler diperkenalkan

karakter (konten) metode

Waktu panggilan:

Dari awal baris, sebelum mengalami label, ada nilai karakter, isi dari string ini.

Dari label, label sebelum pertemuan berikutnya, kehadiran karakter, nilai isi string ini.

Dari label, sebelum menghadapi terminator baris, kehadiran karakter, nilai isi string ini.

Tag mungkin menjadi awal dari tag, dapat menjadi akhir dari label.

startDocument () metode

Dokumentasi startup disebut.

endDocument () metode

Ketika panggilan mencapai akhir parser dokumen.

startElement (nama, attrs) metode

Sebut ditemui start tag XML, nama adalah nama tag, attrs adalah tag nilai properti kamus.

endElement metode (nama)

Panggilan ditemui tag XML akhir.


metode make_parser

Metode berikut membuat objek parser baru dan kembali.

xml.sax.make_parser( [parser_list] )

Parameter Deskripsi:

  • parser_list - parameter opsional, daftar parser

metode parser

Metode berikut membuat parser SAX dan mengurai dokumen xml:

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

Parameter Deskripsi:

  • xmlfile - nama file xml
  • ContentHandler - harus menjadi obyek ContentHandler
  • ErrorHandler - Jika parameter ini ditentukan, ErrorHandler harus Obyek SAX ErrorHandler

metode parseString

Metode parseString menciptakan parser XML dan mengurai string xml:

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

Parameter Deskripsi:

  • xmlstring - string xml
  • ContentHandler - harus menjadi obyek ContentHandler
  • ErrorHandler - Jika parameter ini ditentukan, ErrorHandler harus Obyek SAX ErrorHandler

Python parsing contoh XML

#!/usr/bin/python3

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

   # 元素开始调用
   def startElement(self, tag, attributes):
      self.CurrentData = tag
      if tag == "movie":
         print ("*****Movie*****")
         title = attributes["title"]
         print ("Title:", title)

   # 元素结束调用
   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 = ""

   # 读取字符时调用
   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__"):
   
   # 创建一个 XMLReader
   parser = xml.sax.make_parser()
   # turn off namepsaces
   parser.setFeature(xml.sax.handler.feature_namespaces, 0)

   # 重写 ContextHandler
   Handler = MovieHandler()
   parser.setContentHandler( Handler )
   
   parser.parse("movies.xml")

Kode di atas dijalankan sebagai 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

Lengkap SAX dokumentasi API silakan merujuk ke Python SAX API


Gunakan xml.dom parse xml

Document Object Model (Document Object Model, disebut sebagai DOM), itu adalah pengobatan W3C-direkomendasikan Extensible Markup Language pemrograman antarmuka standar.

Dalam parser DOM untuk mengurai dokumen XML, membaca seluruh dokumen sekaligus, semua elemen dari dokumen yang disimpan dalam struktur pohon di memori, maka Anda dapat menggunakan DOM untuk menyediakan fungsi yang berbeda untuk membaca atau memodifikasi dokumen konten dan struktur dimodifikasi untuk menulis isi dari file xml.

python dengan xml.dom.minidom untuk mengurai dokumen xml, contoh adalah sebagai berikut:

#!/usr/bin/python3

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

# 使用minidom解析器打开 XML 文档
DOMTree = xml.dom.minidom.parse("movies.xml")
collection = DOMTree.documentElement
if collection.hasAttribute("shelf"):
   print ("Root element : %s" % collection.getAttribute("shelf"))

# 在集合中获取所有电影
movies = collection.getElementsByTagName("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)

Hasil dari prosedur di atas adalah sebagai 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

Lengkap DOM dokumentasi API silakan lihat Python DOM API .