Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

Python — обработка XML

Предыдущая страницаСледующая страница

XML – это переносимый язык с открытым исходным кодом, который позволяет программистам разрабатывать приложения, которые могут быть прочитаны другими приложениями, независимо от операционной системы и/или языка разработки.

Что такое XML?

Расширяемый язык разметки (XML) — это язык разметки, очень похожий на HTML или SGML. Это рекомендовано консорциумом World Wide Web и доступно как открытый стандарт.

XML чрезвычайно удобен для отслеживания небольших и средних объемов данных без использования магистрали на основе SQL.

Архитектуры XML-парсера и API

Стандартная библиотека Python предоставляет минимальный, но полезный набор интерфейсов для работы с XML.

Двумя наиболее простыми и широко используемыми API для XML-данных являются интерфейсы SAX и DOM.

Очевидно, что SAX не может обрабатывать информацию так же быстро, как DOM, при работе с большими файлами. С другой стороны, исключительное использование DOM может убить ваши ресурсы, особенно при работе с большим количеством небольших файлов.

SAX доступен только для чтения, а DOM позволяет вносить изменения в файл XML. Поскольку эти два разных API буквально дополняют друг друга, нет никаких причин, по которым вы не можете использовать их оба в больших проектах.

Для всех наших примеров XML-кода давайте использовать простой XML-файл movies.xml. в качестве входных данных —

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

Синтаксический анализ XML с помощью SAX API

SAX — это стандартный интерфейс для анализа XML, управляемого событиями. Анализ XML с помощью SAX обычно требует создания собственного ContentHandler путем создания подкласса xml.sax.ContentHandler.

Ваш обработчик контента обрабатывает определенные теги и атрибуты вашей разновидности XML. Объект ContentHandler предоставляет методы для обработки различных событий синтаксического анализа. Принадлежащий ему синтаксический анализатор вызывает методы ContentHandler при анализе XML-файла.

Методы startDocument и конечный документ вызываются в начале и в конце файла XML. Метод символы(текст) передается символьные данные файла XML через текст параметра.

ContentHandler вызывается в начале и в конце каждого элемента. Если синтаксический анализатор не находится в режиме пространства имен, методы startElement(тег, атрибуты) и endElement(тег) называются; в противном случае соответствующие методы startElementNS и endElementNS называются. Здесь тег — это тег элемента, а атрибуты — объект атрибутов.

Вот другие важные методы, которые нужно понять, прежде чем продолжить —

make_parser Метод

Следующий метод создает новый объект парсера и возвращает его. Созданный объект парсера будет иметь первый тип парсера, который система найдет.

xml.sax.make_parser( [parser_list] )

Вот подробная информация о параметрах —

анализ Метод

Следующий метод создает анализатор SAX и использует его для анализа документа.

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

Вот подробная информация о параметрах —

Строка parseString Метод

Существует еще один способ создания анализатора SAX и анализа указанной строки XML. .

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

Вот подробная информация о параметрах —

Пример

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

Это даст следующий результат —

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

Полную информацию о документации SAX API см. в стандартных API Python SAX.

Синтаксический анализ XML с помощью DOM API

Объектная модель документа («DOM») — это межъязыковой API консорциума World Wide Web (W3C) для доступа и изменения XML-документов.

DOM чрезвычайно полезен для приложений с произвольным доступом. SAX позволяет просматривать только один бит документа за раз. Если вы просматриваете один элемент SAX, у вас нет доступа к другому.

Вот самый простой способ быстро загрузить XML-документ и создать объект minidom с помощью модуля xml.dom. Объект minidom предоставляет простой метод синтаксического анализатора, который быстро создает дерево DOM из файла XML.

Образец фразы вызывает функцию parse( file [,parser] ) объекта minidom для синтаксического анализа файла XML, обозначенного файлом, в объект дерева 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

Это даст следующий результат —

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

Полную информацию о документации DOM API см. в стандартных API Python DOM.


Python

  1. Типы данных Python
  2. Операторы Python
  3. Оператор передачи Python
  4. Аргументы функции Python
  5. Словарь Питона
  6. Итераторы Python
  7. Замыкания Python
  8. Дата и время Python
  9. Сон питона ()
  10. Python — Обзор