Latest web development tutorials

Python parsowania XML

Czym jest XML?

Oznacza XML(ExtensibleMarkup Languagee X tensible M arkup L anguage). Można nauczyć się za pośrednictwem tej strony XML Tutorial

XML został zaprojektowany do przesyłania i przechowywania danych.

XML to zestaw reguł do definiowania semantyki znaczników te tagi będą dokumencie podzielony na wiele części i te części, które należy zidentyfikować.

Jest to również metajęzyk znakowania, która definiuje składnię języka używanego do określenia innego, semantycznej strukturze języka znaczników specyficzne dla domeny.


Pythona do parsowania XML

Wspólna DOM i SAX interfejsy programowania XML, dwa różne interfejsy z plików XML tak, oczywiście, stosowanie różnych okazjach.

Istnieją trzy sposoby python parsowanie XML, SAX, DOM i ElementTree:

1.SAX (Simple API for XML)

Biblioteka standardowa Pythona zawiera parser SAX SAX z modelem zdarzeniami, wywołany przez jedno zdarzenie w procesie analizowania XML i wywoływanie funkcji zwrotnych zdefiniowanych przez użytkownika do obsługi plików XML.

2.DOM (Document Object Model)

Dane XML jest analizowany pod drzewem w pamięci, działający za pośrednictwem drzewa manipulować XML.

3.ElementTree (elementem drzewa)

ElementTree jako lekki DOM z wygodnego i przyjaznego interfejsu API. Dostępność kodu, szybkie i zużywa mniej pamięci.

Uwaga: Ze względu na DOM potrzebne do mapowania danych XML do drzewa pamięci, jeden wolny, drugi jest bardziej zużycie pamięci, SAX strumieniowe odczytuje plik XML szybciej, zajmują mniej pamięci, ale wymaga od użytkownika do wdrożenia zwrotnego (handler ).

Użyj tej sekcji do movies.xml instancji dokumentu XML brzmi następująco:

<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 analizowania XML za pomocą SAX

SAX to API zdarzeniami.

Wykorzystanie SAX parsowania dokumentu XML składa się z dwóch części: parsera i obsługi zdarzeń.

Parser jest odpowiedzialny za czytanie dokumentów XML i wysyła obsługi zdarzeń zdarzenia, takiego jak elementy zaczynają ze zdarzeniem końcowym elementem;

Moduł obsługi zdarzeń jest odpowiedzialny za Odpowiednio przypadku, transfer danych XML w celu przetworzenia.

  • 1, przetwarzanie dużych plików;
  • 2, tylko część zawartości pliku, lub po prostu w celu uzyskania szczegółowych informacji z pliku.
  • 3, chcą zbudować własny model obiektowy czasu.

Użyj sax sposób xml xml.sax po raz pierwszy wprowadzony w funkcji analizowania, jak również xml.sax.handler ContentHandler w Pythonie.

metoda klasy ContentHandler wprowadzone

Metoda znaków (treść)

Harmonogram połączenia:

Od początku linii, przed wystąpieniem etykiety, istnieje wartość postaci, zawartość tych łańcuchów.

Z etykiety, etykietę przed następnego kontaktu, obecność postaci, stosunek zawartości tych łańcuchów.

Z etykietą przed napotkania terminatora linii, obecność znaków, wartości zawartości tych ciągów.

Znacznik może być na początku znacznika, może być koniec etykiety.

Metoda startDocument ()

Dokumentacja startowy o nazwie.

Metoda endDocument ()

Gdy wywołanie dotrze do końca parsera dokumentu.

(Nazwa, attrs) Metoda startElement

Zadzwoń napotkał znacznik początkowy XML, nazwa jest nazwą zmiennej, attrs jest słownikiem tag wartość nieruchomości.

Metoda endElement (nazwa)

Zaproszenie napotkał znacznik końcowy XML.


metoda make_parser

Poniższa metoda tworzy nowy obiekt parsera i powraca.

xml.sax.make_parser( [parser_list] )

Parametr Opis:

  • parser_list - opcjonalny parametr lista parser

metoda parser

Poniższa metoda tworzy parser SAX i analizować dokument XML:

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

Parametr Opis:

  • xmlfile - nazwa pliku xml
  • ContentHandler - musi być przedmiotem ContentHandler
  • ErrorHandler - Jeśli ten parametr zostanie określony, ErrorHandler musi być obiektem SAX ErrorHandler

metoda parseString

parseString sposób tworzy parsera XML i analizować xml ciąg:

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

Parametr Opis:

  • xmlstring - ciąg xml
  • ContentHandler - musi być przedmiotem ContentHandler
  • ErrorHandler - Jeśli ten parametr zostanie określony, ErrorHandler musi być obiektem SAX ErrorHandler

Python parsowania XML wystąpienie

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

Powyższy kod jest wykonywany w następujący sposób:

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

Kompletna dokumentacja API SAX należy zapoznać się z Python SAX API


Użyj xml.dom parse xml

Document Object Model (Document Object Model, dalej DOM), jest to zabieg W3C zaleca Extensible Markup Language standardowy interfejs programowania.

W parsera DOM do analizowania dokumentu XML, przeczytać cały dokument na raz, wszystkie elementy dokumentu zapisanego w strukturze drzewa w pamięci, a następnie można użyć DOM, aby zapewnić różne funkcje do odczytu lub modyfikacji dokumentu zawartość i struktura zostać zmodyfikowane, aby zapisać zawartość pliku xml.

pyton z xml.dom.minidom analizować dokument XML przykłady są następujące:

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

Wyniki powyższych procedur są następujące:

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

Kompletna dokumentacja API DOM patrz Python DOM API .