Latest web development tutorials

Python3 XML синтаксического анализа

Что такое XML?

XML ссылается на расширяемый язык разметки(е Х tensible М arkup L anguage), подмножество стандартной обобщенный язык разметки, представляет собой способ маркировки электронного документа , чтобы иметь структурированный язык разметки. Вы можете узнать с помощью этого сайта XML Учебник

XML предназначен для передачи и хранения данных.

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

Кроме того, язык мета-разметки, который определяет синтаксис языка, используемого для определения другого конкретного домена, семантический, структурированный язык разметки.


Python для XML синтаксического анализа

Общие DOM и XML интерфейсы программирования SAX, два различных интерфейса с XML-файлов, как, конечно, использование различных случаев.

Есть три способа Python синтаксического анализа XML, SAX, DOM и ElementTree:

1.SAX (простой API для XML)

Python стандартная библиотека содержит SAX-парсер, SAX с моделью, управляемой событиями, инициированный одним событием в процессе синтаксического анализа XML и вызова, определенные пользователем функции обратного вызова для обработки XML-файлов.

2.DOM (Document Object Model)

Данных XML анализируется в дерево в памяти, работающей по дереву, чтобы манипулировать 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>

Python XML-синтаксического анализа с использованием SAX

SAX является событийно-ориентированный API.

Использование SAX синтаксического анализа документа XML состоит из двух частей: синтаксический анализатор и обработчик событий.

Анализатор отвечает за чтение XML-документы и отправляет обработчики событий событие, например, элементы начинаются с конечным элементом события;

Обработчик события отвечает за событие, соответственно, передача данных XML для дальнейшей обработки.

  • 1, обработка больших файлов;
  • 2, только часть содержимого файла, или просто, чтобы получить конкретную информацию из файла.
  • 3, хотят построить свою собственную модель объекта времени.

Используйте саксофоне образом XML xml.sax впервые введен в функции синтаксического анализа, а также xml.sax.handler ContentHandler в Python.

Метод класса ContentHandler введен

символов метод (содержание)

Время звонка:

С начала строки, прежде чем испытывать этикетку, есть значение символов, содержание этих строк.

Из ярлыка, этикетки до следующей встречи, присутствие персонажа, значение содержание этих строк.

С меткой, до встречи с терминатор линии, наличие символов, значение содержания этих строк.

Метка может быть началом тега, это может быть конец этикетки.

Метод StartDocument ()

Запуск документации называется.

EndDocument метод ()

Когда вызов достигает конца документа синтаксического анализа.

(Имя, ATTRS) метод StartElement

Вызов встречается начальный тег XML, имя является именем тега, ATTRS является словарем тег значение свойства.

Метод EndElement (имя)

Вызов встречается конечный XML-тег.


метод make_parser

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

xml.sax.make_parser( [parser_list] )

Параметр Описание:

  • parser_list - необязательный параметр, список парсер

метод синтаксического анализа

Следующий метод создает SAX-парсер и синтаксического анализа XML-документ:

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

Параметр Описание:

  • XMLFILE - имя файла XML
  • ContentHandler - должен быть объектом ContentHandler
  • ErrorHandler - Если задан этот параметр, ErrorHandler должен быть объект SAX ErrorHandler

метод parseString

метод parseString создает XML-парсер и синтаксического анализа XML-строку:

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

Параметр Описание:

  • xmlstring - XML - строка
  • ContentHandler - должен быть объектом ContentHandler
  • ErrorHandler - Если задан этот параметр, ErrorHandler должен быть объект SAX ErrorHandler

Python синтаксического анализа экземпляра 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")

Приведенный выше код выполняется следующим образом:

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

Полная документация по API SAX , пожалуйста , обратитесь к Python SAX API ,


Используйте xml.dom синтаксического анализа XML

Модель документа Объект (Document Object Model, упоминается как DOM), это W3C-рекомендуемое лечение Extensible Markup Language стандартный интерфейс программирования.

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

Python с xml.dom.minidom для синтаксического анализа XML-документ, примеры заключаются в следующем:

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

Результаты описанных выше процедур следующим образом:

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

Полная документация по API DOM обратитесь к Питона DOM - API , .