Python3 análise XML
O que é XML?
XML refere-se a linguagem de marcação extensível(e X tensible M arkup L anguage), um subconjunto da Standard Generalized Markup Language, é um método para a marcação de um documento eletrônico para ter uma linguagem de marcação estruturada. Você pode aprender através deste site XML Tutorial
XML é projetado para transmitir e armazenar dados.
XML é um conjunto de regras para definir a semântica das marcas, estas tags irá documentar dividido em várias partes e estas peças a serem identificadas.
É também uma linguagem de meta-marcação que define a sintaxe da linguagem usada para definir outra, semântica, linguagem de marcação estruturada de domínio específico.
python para analisar XML
DOM comum e interfaces de programação XML SAX, duas interfaces de diferentes ficheiros XML com a forma, é claro, da utilização de diferentes ocasiões.
Há três maneiras XML python parsing, SAX, DOM, e ElementTree:
1.SAX (API simples para XML)
python biblioteca padrão contém parser SAX, SAX com o modelo orientado a eventos, desencadeada por um evento no processo de análise de XML e chamar funções de chamada de retorno definida pelo usuário para lidar com arquivos XML.
2.DOM (Document Object Model)
Os dados XML é analisado em uma árvore na memória, operando através da árvore para manipular XML.
Use esta seção para um movies.xml XML documento de instância estipula o seguinte:
<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 parsing de XML usando SAX
SAX é uma API orientada a eventos.
Use SAX análise de um documento XML envolve duas partes: o manipulador analisador e do evento.
O analisador é responsável por ler documentos XML, e envia os manipuladores de eventos de eventos, tais como elementos começam com o evento elemento final;
O manipulador de eventos é responsável pelo evento em conformidade, a transferência de dados XML para processamento.
- 1, o processamento de arquivos grandes;
- 2, apenas uma parte dos conteúdos do arquivo, ou simplesmente para obter informações específicas do arquivo.
- 3, quer construir seu próprio modelo de objeto do tempo.
Use sax xml.sax maneira xml introduzido pela primeira vez na função de análise, bem como a xml.sax.handler ContentHandler em python.
método de classe ContentHandler introduzido
caracteres método (conteúdo)
O momento da chamada:
A partir do início da linha, antes de experimentar o rótulo, existe um valor de caracteres, o conteúdo destas cordas.
A partir de um rótulo, uma etiqueta antes do encontro seguinte, a presença do carácter, o valor do conteúdo destas cordas.
De uma etiqueta, antes de encontrar um terminador de linha, a presença de personagens, o valor do conteúdo dessas cordas.
A etiqueta pode ser o começo da etiqueta, que pode ser o fim da etiqueta.
startDocument () Método
inicialização de documentação chamado.
endDocument () Método
Quando a chamada chega ao fim do analisador documento.
startElement (nome, attrs) Método
Chamada marca de início XML encontrado, o nome é o nome da marca, attrs é um tag valor da propriedade dicionário.
endElement (nome) Método
Chamada encontrou tag end XML.
método make_parser
O método a seguir cria um novo objeto de analisador e retorna.
xml.sax.make_parser( [parser_list] )
Parâmetro Descrição:
- parser_list - parâmetro opcional, a lista de analisador
método parser
O método a seguir cria um parser SAX e analisar documentos xml:
xml.sax.parse( xmlfile, contenthandler[, errorhandler])
Parâmetro Descrição:
- xmlfile - nome do arquivo xml
- ContentHandler - devem ser objecto de um ContentHandler
- ErrorHandler - Se este parâmetro for especificado, ErrorHandler deve ser um objeto SAX ErrorHandler
método parseString
Método parseString cria um analisador XML e analisar cadeia xml:
xml.sax.parseString(xmlstring, contenthandler[, errorhandler])
Parâmetro Descrição:
- xmlString - string XML
- ContentHandler - devem ser objecto de um ContentHandler
- ErrorHandler - Se este parâmetro for especificado, ErrorHandler deve ser um objeto SAX ErrorHandler
Python instância XML parsing
#!/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")
O código acima é executado da seguinte forma:
*****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
documentação da API SAX completa consulte os SAX APIs Python
Use xml.dom parse xml
Document Object Model (Document Object Model, referidos como DOM), é um tratamento recomendado pelo W3C interface de programação padrão Extensible Markup Language.
Em um analisador DOM para analisar um documento XML, leia o documento inteiro de uma só vez, todos os elementos do documento salvo em uma estrutura de árvore na memória, em seguida, você pode usar o DOM para fornecer diferentes funções para ler ou modificar o documento conteúdo e estrutura a ser modificado para escrever o conteúdo do arquivo xml.
python com xml.dom.minidom para analisar documentos XML, os exemplos são os seguintes:
#!/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)
Os resultados dos procedimentos acima são como se segue:
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
documentação da API DOM completa consulte o Python o APIs DOM .