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