Latest web development tutorials

Python parsing XML

Che cosa è XML?

XML significa Extensible Markup Language(e X tensible M arkup L anguage). 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.

3.ElementTree (albero elemento)

ElementTree come DOM leggero, con una API conveniente e amichevole. la disponibilità del codice, veloce e consuma meno memoria.

Nota: a causa di DOM bisogno di mappare i dati XML in memoria di albero, un lento, il secondo è più il consumo di memoria, Streaming SAX legge il file XML velocemente, occupano meno memoria, ma richiede all'utente di implementare callback (gestore ).

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/python
# -*- coding: UTF-8 -*-

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/python
# -*- coding: UTF-8 -*-

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 .