Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

Python - Processamento XML

Página anteriorPróxima página
XML é uma linguagem portátil e de código aberto que permite aos programadores desenvolver aplicativos que podem ser lidos por outros aplicativos, independentemente do sistema operacional e / ou linguagem de desenvolvimento.

O que é XML?


A Extensible Markup Language (XML) é uma linguagem de marcação muito parecida com HTML ou SGML. Isso é recomendado pelo World Wide Web Consortium e está disponível como um padrão aberto.

XML é extremamente útil para controlar pequenas e médias quantidades de dados sem exigir um backbone baseado em SQL.

Arquiteturas e APIs do analisador XML


A biblioteca padrão Python fornece um conjunto mínimo, mas útil de interfaces para trabalhar com XML.

As duas APIs mais básicas e amplamente usadas para dados XML são as interfaces SAX e DOM.

  • API simples para XML (SAX) - Aqui, você registra retornos de chamada para eventos de interesse e, em seguida, permite que o analisador prossiga pelo documento. Isso é útil quando seus documentos são grandes ou você tem limitações de memória, ele analisa o arquivo à medida que o lê do disco e o arquivo inteiro nunca é armazenado na memória.

  • API Document Object Model (DOM) - Esta é uma recomendação do World Wide Web Consortium em que todo o arquivo é lido na memória e armazenado em uma forma hierárquica (baseada em árvore) para representar todos os recursos de um documento XML.

O SAX obviamente não pode processar informações tão rápido quanto o DOM ao trabalhar com arquivos grandes. Por outro lado, usar o DOM exclusivamente pode realmente matar seus recursos, especialmente se usado em muitos arquivos pequenos.

SAX é somente leitura, enquanto DOM permite alterações no arquivo XML. Uma vez que essas duas APIs diferentes se complementam literalmente, não há razão para que você não possa usá-las para grandes projetos.

Para todos os nossos exemplos de código XML, vamos usar um arquivo XML simples movies.xml como uma entrada -
    Guerra, Thriller   DVD   2003   PG   10   Fale sobre uma guerra EUA-Japão     Anime, Ficção Científica   DVD   1989   R   8   Uma ficção científica     Anime, Action   DVD   4   PG   10   Vash, o Stampede!     Comédia   VHS   PG   2   Tédio visível    

Análise de XML com APIs SAX


SAX é uma interface padrão para análise XML baseada em eventos. A análise de XML com SAX geralmente requer que você crie seu próprio ContentHandler criando uma subclasse de xml.sax.ContentHandler.

Seu ContentHandler lida com as tags e atributos específicos de seu (s) tipo (s) de XML. Um objeto ContentHandler fornece métodos para lidar com vários eventos de análise. Seu próprio analisador chama métodos ContentHandler à medida que analisa o arquivo XML.

Os métodos startDocument e endDocument são chamados no início e no final do arquivo XML. O método caracteres (texto) são passados ​​dados de caractere do arquivo XML por meio do texto do parâmetro.

O ContentHandler é chamado no início e no final de cada elemento. Se o analisador não estiver no modo de namespace, os métodos startElement (tag, atributos) e endElement (tag) são chamados; caso contrário, os métodos correspondentes startElementNS e endElementNS são chamados. Aqui, tag é a tag do elemento e attribute é um objeto Attributes.

Aqui estão outros métodos importantes para entender antes de prosseguir -

O make_parser Método


O método a seguir cria um novo objeto analisador e o retorna. O objeto analisador criado será do primeiro tipo de analisador que o sistema encontrar.
 xml.sax.make_parser ([parser_list]) 

Aqui está o detalhe dos parâmetros -

  • parser_list - O argumento opcional que consiste em uma lista de analisadores a serem usados, os quais devem implementar o método make_parser.

A análise Método


O método a seguir cria um analisador SAX e o usa para analisar um documento.
 xml.sax.parse (xmlfile, contenthandler [, errorhandler]) 

Aqui está o detalhe dos parâmetros -

  • xmlfile - Este é o nome do arquivo XML a partir do qual ler.

  • manipulador de conteúdo - Deve ser um objeto ContentHandler.

  • errorhandler - Se especificado, errorhandler deve ser um objeto SAX ErrorHandler.

A parseString Método


Existe mais um método para criar um analisador SAX e para analisar a string XML especificada .
 xml.sax.parseString (xmlstring, contenthandler [, errorhandler]) 

Aqui está o detalhe dos parâmetros -

  • xmlstring - Este é o nome da string XML a partir da qual ler.

  • manipulador de conteúdo - Deve ser um objeto ContentHandler.

  • errorhandler - Se especificado, errorhandler deve ser um objeto SAX ErrorHandler.

Exemplo

 #! / usr / bin / pythonimport xml.saxclass MovieHandler (xml.sax.ContentHandler):def __init __ (self):self.CurrentData ="" self .type ="" self.format ="" self.year ="" self.rating ="" self.stars ="" self.description ="" # Chamar quando um elemento iniciar def startElement (self, tag, atributos) :self.CurrentData =tag if tag =="movie":print "***** Movie *****" title =attribute ["title"] print "Title:", title # Chamada quando um elemento termina def endElement (self, tag):if self.CurrentData =="type":print "Type:", self.type elif self.CurrentData =="format":print "Format:", self.format elif self.CurrentData =="ano":imprimir "Ano:", 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 ="" # Chama quando um caractere é lido def characters (self, content):if self.Cu rrentData =="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__ "):# criar um XMLReader parser =xml.sax.make_parser () # desligar namepsaces parser.setFeature (xml.sax.handler.feature_namespaces, 0) # substituir o padrão ContextHandler Handler =MovieHandler () parser.setContentHandler (Handler) parser.parse ("movies .xml ") 

Isso produziria o seguinte resultado -
 ***** Filme ***** Título:Enemy BehindType:War, ThrillerFormat:DVDYear:2003Rating:PGStars:10Description:Talk about a US-Japan war ***** Movie ***** Título:TransformersType:Anime, Science FictionFormat:DVDYear:1989Rating:RStars:8Description:A schientific fiction ***** Movie ***** Title:TrigunType:Anime, ActionFormat:DVDRating:PGStars:10Descrição:Vash the Stampede! ***** Filme ***** Título:IshtarTipo:ComedyFormat:VHSRating:PGStars:2Descrição:Tédio visível 

Para obter detalhes completos sobre a documentação da API SAX, consulte as APIs SAX Python padrão.

Análise de XML com APIs DOM


O Document Object Model ("DOM") é uma API de linguagem cruzada do World Wide Web Consortium (W3C) para acessar e modificar documentos XML.

O DOM é extremamente útil para aplicativos de acesso aleatório. O SAX permite apenas a visualização de um bit do documento por vez. Se você estiver olhando para um elemento SAX, não terá acesso a outro.

Esta é a maneira mais fácil de carregar rapidamente um documento XML e criar um objeto minidom usando o módulo xml.dom. O objeto minidom fornece um método analisador simples que cria rapidamente uma árvore DOM a partir do arquivo XML.

A frase de exemplo chama a função de análise (arquivo [, analisador]) do objeto minidom para analisar o arquivo XML designado por arquivo em um objeto de árvore DOM.
 #! / usr / bin / pythonfrom xml.dom.minidom import parseimport xml.dom.minidom # Abra o documento XML usando minidom parserDOMTree =xml.dom.minidom.parse ("movies.xml" ) collection =DOMTree.documentElementif collection.hasAttribute ("shelf"):print "Elemento raiz:% s"% collection.getAttribute ("shelf") # Obtenha todos os filmes em collectionmovies =collection.getElementsByTagName ("movie") # Imprimir detalhes de cada filme.para filme em filmes:imprimir "***** Filme *****" if movie.hasAttribute ("título"):imprimir "Título:% s"% movie.getAttribute ("título" ) type =movie.getElementsByTagName ('type') [0] print "Type:% s"% type.childNodes [0] .data format =movie.getElementsByTagName ('format') [0] print "Formato:% s" % format.childNodes [0] .data rating =movie.getElementsByTagName ('rating') [0] print "Rating:% s"% rating.childNodes [0] .data description =movie.getElementsByTagName ('description') [0] ] print "Descrição:% s"% description.childNodes [0] .data 

Isso produziria o seguinte resultado -
 Elemento raiz:Novidades ***** Filme ***** Título:Enemy BehindType:War, ThrillerFormat:DVDRating:PGDescription:Talk about a US-Japan war ***** Filme ***** Título:TransformersType:Anime, Science FictionFormat:DVDRating:RDescription:A schientific fiction ***** Movie ***** Title:TrigunType:Anime, ActionFormat:DVDRating:PGDescription:Vash the Stampede! * **** Filme ***** Título:IshtarTipo:ComedyFormat:VHSRating:PGDescrição:Tédio visível 

Para obter detalhes completos sobre a documentação da API DOM, consulte as APIs DOM padrão do Python.

python

  1. Python RegEx
  2. Exceções personalizadas do Python
  3. Módulos Python
  4. Python DateTime, TimeDelta, Strftime (Format) com exemplos
  5. Variáveis ​​Python:Como definir / declarar tipos de variáveis ​​de string
  6. Python Vs Ruby:Diferença entre Ruby e Python