Latest web development tutorials

Python3 parsing XML

Che cosa è XML?

XML si riferisce a extensible markup language(e X tensible M arkup L anguage), un sottoinsieme del Standard Generalized Markup Language, è un metodo per la marcatura di un documento elettronico di avere un linguaggio di marcatura strutturato. Si può imparare attraverso questo sito XML Tutorial

XML è stato progettato per trasmettere e memorizzare i dati.

XML è un insieme di regole per definire la semantica dei tag, questi tag verranno documento diviso in molte parti e queste parti per essere identificati.

E 'anche un linguaggio meta-markup che definisce la sintassi del linguaggio utilizzato per definire altri domain-specific, semantica, linguaggio di marcatura strutturato.


Python per parsing XML

DOM comune e XML programmazione interfacce SAX, due diverse interfacce con XML file nel modo, naturalmente, l'uso di diverse occasioni.

Ci sono tre modi di pitone parsing XML, SAX, DOM, e ElementTree:

1.SAX (Simple API for XML)

Python Library standard contiene parser SAX, SAX con il modello event-driven, innescata da un evento nel processo di parsing XML e chiamare le funzioni di callback definite dall'utente per gestire i file XML.

2.DOM (Document Object Model)

I dati XML viene analizzato in un albero in memoria, che opera attraverso l'albero di manipolare XML.

Utilizzare questa sezione per un movies.xml XML documento di istanza recita:

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

SAX è una API event-driven.

Utilizzare SAX parsing di un documento XML coinvolge due parti: il gestore di parser e l'evento.

Il parser è responsabile per la lettura di documenti XML, e invia i gestori di eventi di eventi, come ad esempio gli elementi iniziano con l'evento finale elemento;

Il gestore di eventi è responsabile dell'evento conseguenza, il trasferimento dei dati XML per l'elaborazione.

  • 1, l'elaborazione di file di grandi dimensioni;
  • 2, solo una parte dei contenuti del file, o semplicemente per ottenere informazioni specifiche dal file.
  • 3, vuole costruire il proprio modello a oggetti del tempo.

Utilizzare sax xml.sax modo XML introdotto nella funzione di analisi, così come la xml.sax.handler ContentHandler in pitone.

metodo di classe ContentHandler introdotto

Metodo di caratteri (contenuto)

Il momento della chiamata:

Dall'inizio della linea, prima di sperimentare l'etichetta, vi è un valore di carattere, il contenuto di queste stringhe.

Da una etichetta, un'etichetta prima del prossimo incontro, la presenza del carattere, valore del contenuto di tali stringhe.

Da una etichetta, prima di incontrare una terminazione di linea, la presenza di caratteri, valore del contenuto di tali stringhe.

Tag può essere l'inizio del tag, può essere la fine dell'etichetta.

Metodo startDocument ()

avvio documentazione richiesta.

Metodo endDocument ()

Quando la chiamata raggiunge la fine del parser documento.

(, Nome attrs) metodo startElement

Chiamata tag iniziale XML incontrato, nome è il nome del tag, attrs è un tag valore della proprietà dizionario.

Metodo endElement (nome)

Chiamata incontrato tag di chiusura XML.


metodo make_parser

Il metodo seguente crea un nuovo oggetto parser e ritorna.

xml.sax.make_parser( [parser_list] )

Descrizione Parametro:

  • parser_list - parametro opzionale, la lista parser

metodo di parser

Il metodo seguente crea un parser SAX e analizzare documento XML:

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

Descrizione Parametro:

  • XMLFILE - nome del file XML
  • ContentHandler - deve essere oggetto di un ContentHandler
  • ErrorHandler - Se si specifica questo parametro, ErrorHandler deve essere un oggetto SAX ErrorHandler

metodo parseString

Metodo parseString crea un parser XML e analizzare la stringa xml:

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

Descrizione Parametro:

  • xmlString - stringa XML
  • ContentHandler - deve essere oggetto di un ContentHandler
  • ErrorHandler - Se si specifica questo parametro, ErrorHandler deve essere un oggetto SAX ErrorHandler

Python esempio XML parsing

#!/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")

Il codice di cui sopra viene eseguita come segue:

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

Completa SAX documentazione delle API si rimanda alle SAX API di Python


Utilizzare xml.dom parse XML

Document Object Model (Document Object Model, indicato come DOM), è un trattamento raccomandato dal W3C Extensible Markup Language interfaccia di programmazione standard.

In un parser DOM per analizzare un documento XML, leggere l'intero documento in una sola volta, tutti gli elementi del documento salvato in una struttura ad albero in memoria, quindi è possibile utilizzare il DOM per fornire diverse funzioni per leggere o modificare il documento contenuto e la struttura ad essere modificati per scrivere il contenuto del file XML.

pitone con xml.dom.minidom per analizzare documento XML, gli esempi sono i seguenti:

#!/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)

I risultati delle procedure di cui sopra sono i seguenti:

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

Completa DOM documentazione API consultare il Python la API DOM .