Re: [python-brasil] Busca em arquivos XML

40 views
Skip to first unread message

Luciano Rodrigues da Silva

unread,
Apr 26, 2007, 3:33:11 PM4/26/07
to python...@yahoogrupos.com.br
Elementtree? Ainda não usei, mas parece bom.

http://effbot.org/zone/element.htm

On 4/26/07, Paul Eipper <lkra...@gmail.com> wrote:
> Olá,
>
> Eu tenho um "banco de dados" em XML que arquiva informações do
> conteúdo de mídias removíveis (CD's, DVD's, etc).
>
> O que eu quero é usar o Python para buscar uma informação nesse
> catálogo e retornar as informações pertinentes. Exemplo:
>
> <catalog name="Catalogo de Discos" owner="Me" time="Apr 26 14:00 2007">
> <datafile version="1.4"/>
> <comment> </comment>
> <media name="Backup" number="1" owner="Me" type="CD" time="Apr 26 14:00 2007">
> <directory name="documentos" time="Dec 06 13:41 2006">
> <file name="cartao_natal.odf" size="43.53 Mb" time="Dec 06 13:05 2006">
> </file>
> </directory>
> <directory name="musicas" time="Dec 28 13:37 2006">
> <file name="Joe Satriani &amp; Metallica.mp3" size="3.41 Mb"
> time="Oct 14 19:47 2006">
> <comment>3:44, 128 kbps#44100Hz, Simple stereo
> </comment>
> <mp3tag artist="Joe Satriani" title="Instrumental" album=" "
> year=" "> </mp3tag>
> </file>
> </directory>
> </media>
> </catalog>
>
> O que eu quero, é fazer uma busca por algum atributo ou texto, e que
> me retorne o catálogo, disco, pasta e arquivo que coincida. Ex:
>
> >>> Busca = "Instrumental" # vai achar no atributo 'title' da tag <mp3tag>
> >>> Resultado = catalogo.find(Busca) # por exemplo
> >>> print Resultado
> [{"media":"Backup/1", "path":"//Catalogo de Discos/Backup/musicas/Joe
> Satriani &amp; Metallica.mp3", "size":"3.41 Mb", "time":"Oct 14 19:47
> 2006"}]
>
> Alguém sabe se existe alguma lib de xml que possibilita isso?
>
> Obrigado
> --
> Paul Eipper
>
>
> ,-----------------------------------------------------------.
> | Antes de enviar um e-mail para o grupo leia: |
> | http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
> | E se você é usuário do BOL lembre-se de cadastrar o |
> | e-mail do grupo na lista branca do seu sistema anti-spam. |
> `-----------------------------------------------------------´
> Links do Yahoo! Grupos
>
>
>


--
Até,

Luciano

<quote>
"Na prática, a teoria é outra!"
</quote>

:wq!


,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html


Vanderson Mota dos Santos

unread,
Apr 26, 2007, 3:37:06 PM4/26/07
to python...@yahoogrupos.com.br
SAX ou DOM. Se a coisa for bem simples e você não precisar ficar acessando
tags repetidamente(em loop) sugiro o SAX. Caso Contrário, use o DOM, que é
bem mais robusto

Em 26/04/07, Luciano Rodrigues da Silva <lucro...@gmail.com> escreveu:


>
> Elementtree? Ainda não usei, mas parece bom.
>
> http://effbot.org/zone/element.htm
>

> > ,----------------------------------------------------------.


> > | Antes de enviar um e-mail para o grupo leia: |
> > | http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
> > | E se você é usuário do BOL lembre-se de cadastrar o |
> > | e-mail do grupo na lista branca do seu sistema anti-spam. |

> > `----------------------------------------------------------´


> > Links do Yahoo! Grupos
> >
> >
> >
>
> --
> Até,
>
> Luciano
>
> <quote>
> "Na prática, a teoria é outra!"
> </quote>
>
> :wq!
>
>


[As partes desta mensagem que não continham texto foram removidas]

Paul Eipper

unread,
Apr 26, 2007, 4:25:55 PM4/26/07
to python...@yahoogrupos.com.br
Encontrei um tutorial que usa libxml2/libxslt [1] e monta um
mini-servidor http para fazer as buscas e obter os resultados. A
pesquisa é feita com XPath queries e usa XSLT para os templates de
apresentação.

Consegui adaptar um pouco pro meu caso, mas ainda falta aprender muito
sobre XSLT... é meio chato, mas ter acesso via rede é algo bem
interessante, especialmente no meu caso que quero com que várias
máquinas possam buscar no mesmo catálogo.

Estava pensando em só compartilhar o arquivo + python app via rede,
mas essa solução veio bem a calhar :)

Pelo que vi, o ElementTree tem um conjunto de instruções XPath mais
reduzido[2][3] e provavelmente poderia fazer o mesmo; já o DOM
(minidom) precisaria codificar estruturas de repetição manualmente
para realizar buscas (não muito diferente de trabalhar em javascript).

[1] http://www.xml.com/pub/a/2004/01/21/udell.html
[2] http://developer.yahoo.com/python/python-xml.html
[3] http://www-128.ibm.com/developerworks/library/x-matters28/

--
Paul Eipper


Em 26/04/07, Vanderson Mota dos Santos<vanders...@gmail.com> escreveu:

Paul Eipper

unread,
Apr 27, 2007, 4:05:24 PM4/27/07
to python...@yahoogrupos.com.br
Alguém já usou o lxml [1] ? Parece um ElemenTree mais robusto.
Alguém sabe onde posso aprender algo sobre como usar XSLT?

[1] http://codespeak.net/lxml

--
Paul Eipper


Em 26/04/07, Paul Eipper<lkra...@gmail.com> escreveu:

Rodrigo Senra

unread,
Apr 28, 2007, 5:13:16 PM4/28/07
to python...@yahoogrupos.com.br
On Thu, 26 Apr 2007 15:07:22 -0300
"Paul Eipper" <lkra...@gmail.com> wrote:

> Olá,
>
> Eu tenho um "banco de dados" em XML que arquiva informações do
> conteúdo de mídias removíveis (CD's, DVD's, etc).

Por "banco de dados" vc quer dizer:
(a) um monte de arquivinhos XML,
(b) 1 único arquivão XML
(c) n.r.a

Existem Native XML Databases [1], que estão começando a despontar
por aí. Eu mesmo estou investigando estes caboclos para ver se
tem algum danado-de-bãum ;o)

Basicamente temos:

1 - arquivos XML no file system
2 - arquivos XML (inteiros) em BLOBS dentro de bancos relacionais
3 - arquivos XML (quebrados) em colunas dentro de bancos relacionais
4 - sistemas híbridos conasiderando 1,2,3
5 - sistemas específicos para o armazenamento e
indexação eficiente de XML (pesquisa recente)

[1] http://en.wikipedia.org/wiki/XML_database

> O que eu quero é usar o Python para buscar uma informação nesse
> catálogo e retornar as informações pertinentes. Exemplo:

> Alguém sabe se existe alguma lib de xml que possibilita isso?

O cElementTree e lxml são de fato suas melhores opções no mundo Python.
(em termo de desempenho, não em número de features).

Se as buscas forem frequentes seria bom vc pensar em algum mecanismo
de indexação, a fim de evitar sempre o parse do xml.
A indexação varia de acordo como vc armazena o XML.

Suponhamos que vc tenha um bocado de arquivinhos XML.
Uma indexação bem simples é criar um dicionário (que pode
ser persistido via pickle ou que vc quiser) cuja chave é
o termo de busca e o valor é uma lista de arquivos em que
a chave aparece. Procure pelo termo "Listas Invertidas" e
vai achar um bocado de coisa interessante sobre indexação.


Abração,
Senra

Reply all
Reply to author
Forward
0 new messages