associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Você não tem permissão para executar esta ação.

Excluir mensagem

LendoXmlComLibxml2

Receita: LendoXmlComLibxml2

  • Todo o manejo de XML no GNOME é feito a través da libxml, com ele podemos ler e modificar arquivos XML.

Vejamos um exemplo.

O arquivo XML

<?xml version="1.0"?>
<story>
        <storyinfo>
                <author>John Fleck</author>
                <datewritten>June 2, 2002</datewritten>
                <keyword>example keyword</keyword>
        </storyinfo>
        <body>
                <headline>This is the headline</headline>
                <para>This is the body text.</para>
        </body>
</story>

Código

   1 import sys
   2 
   3 import libxml2
   4 
   5 def parseStory (cur):
   6 
   7         cur = cur.children
   8 
   9         while cur != None:
  10                 if cur.name == "keyword":
  11                         print "Keyword: %s" % cur.getContent()
  12                 cur = cur.next
  13         sys.exit(0)
  14 
  15 # Le arquivo xml do disco
  16 doc = libxml2.parseFile("sample_Document.xml")
  17 
  18 # Testa se o arquivo existe , se não existir fecha
  19 # o socket com arquivo e sai com erro.
  20 if doc == None:
  21         print "Document not parsed successfully."
  22         doc.freeDoc()
  23         sys.exit(1)
  24 
  25 # Pega o elemento Root neste caso vai ser "<story>"
  26 cur = doc.getRootElement()
  27 
  28 # Testa se a variável "cur" está vazia se estiver
  29 # o documento deve estar vazio.
  30 if cur == None:
  31         print "Empty Document."
  32         doc.freeDoc()
  33         sys.exit(1)
  34 # E ainda testa se o nó root do documento é mesmo o
  35 # nó "<story>"
  36 if cur.name != "story":
  37         print "Document of the wrong type, root node != story"
  38         doc.freeDoc()
  39         sys.exit(1)
  40 
  41 # Pega o nó filho de "<story>" para nós "<storyinfo>"
  42 cur = cur.children
  43 
  44 # Enquanto "cur" não estiver vazia loop ou seja pegue todos
  45 # os <storyinfo>.
  46 while cur != None:
  47         if cur.name == "storyinfo":
  48                 # Se for "<storyinfo>" chama a função "parseStory"
  49                 # que vai pegar os valores internos dele.
  50                 parseStory(cur)
  51         cur = cur.next
  52 doc.freeDoc()

Você pode ver o codigo C em Libxml Tutorial por John Fleck

Volta para CookBook.


WiliamAlvesDeSouza -- (waa) -- wiliamsouza83(arroba)gmail(ponto)com