Diferencia entre revisiones de «Usuario:Lmorillas/intropyaytozgz/xml»

De WikiEducator
Saltar a: navegación, buscar
(Algunos ejemplos de uso)
 
(2 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
{{MiTitulo|Trabajo con ficheros xml / html}}
+
{{MiTitulo|Trabajo con ficheros xml}}
  
 
== Amara ==
 
== Amara ==
Línea 33: Línea 33:
  
 
{{Tip| Es necesario tener instalado un compilador de C y la cabeceras de python (en debian/ubuntu hay que instalar '''python-dev'''}}
 
{{Tip| Es necesario tener instalado un compilador de C y la cabeceras de python (en debian/ubuntu hay que instalar '''python-dev'''}}
 +
 +
== Algunos ejemplos de uso ==
 +
Del manual de Amara: http://wiki.xml3k.org/Amara/Tutorial#The_XML_bindery
 +
 +
'''Uso básico''': recorrer nodos.
 +
<source lang="python">
 +
from amara import bindery
 +
 +
MONTY_XML = """<monty>
 +
  <python spam="eggs">What do you mean "bleh"</python>
 +
  <python ministry="abuse">But I was looking for argument</python>
 +
</monty>"""
 +
 +
doc = bindery.parse(MONTY_XML)
 +
 +
m = doc.monty
 +
p1 = doc.monty.python #or m.python; p1 is just the first python element
 +
print
 +
print p1.xml_attributes[(None, u'spam')]
 +
print p1.spam
 +
 +
for p in doc.monty.python: #The loop will pick up both python elements
 +
    p.xml_write()
 +
</source>
 +
 +
Ejemplo con uso de '''groupby'''
 +
<source lang="python">
 +
from amara import bindery
 +
 +
MONTY_XML = """<quotes>
 +
  <quote skit="1">This parrot is dead</quote>
 +
  <quote skit="2">What do you mean "bleh"</quote>
 +
  <quote skit="2">I don't like spam</quote>
 +
  <quote skit="3">But I was looking for argument</quote>
 +
</quotes>"""
 +
 +
doc = bindery.parse(MONTY_XML)
 +
q1 = doc.quotes.quote # or doc.quotes.quote[0]
 +
print q1.skit
 +
print q1.xml_attributes[(None, u'skit')] # XPath works too: q1.xml_select(u'@skit')
 +
 +
for q in doc.quotes.quote: # The loop will pick up both q elements
 +
    print unicode(q) # Just the child char data
 +
 +
from itertools import groupby
 +
from operator import attrgetter
 +
 +
skit_key = attrgetter('skit')
 +
for skit, quotegroup in groupby(doc.quotes.quote, skit_key):
 +
    print skit, [ unicode(q) for q in quotegroup ]
 +
</source>

Última revisión de 02:23 11 dic 2012


Amara

  • Una muy rápida y con una sintaxis más cercana al xml
    import amara
    URL = '....'  # URL puede ser una url, una ruta de un fichero o una cadena de texto
    doc = amara.parse(URL)
  • Otra más amigable y fácil de utilizar, que convierte el xml en objetos python.

    from amara import bindery
    URL = '....'  
    doc = bindery.parse(URL)
    # si el html o xml puede no ser válido:
    from amara.bindery import html
    URL = '....'  
    doc = html.parse(URL)

Instalar

Para instalar la última versión:

$ pip install -i http://pypi.zepheira.com/releases/index Amara

O descargar, descomprimir y ejecutar dentro del directorio de amara:

$ python setup.py install
Icon present.gif
Tip: Es necesario tener instalado un compilador de C y la cabeceras de python (en debian/ubuntu hay que instalar python-dev


Algunos ejemplos de uso

Del manual de Amara: http://wiki.xml3k.org/Amara/Tutorial#The_XML_bindery

Uso básico: recorrer nodos.

from amara import bindery
 
MONTY_XML = """<monty>
  <python spam="eggs">What do you mean "bleh"</python>
  <python ministry="abuse">But I was looking for argument</python>
</monty>"""
 
doc = bindery.parse(MONTY_XML)
 
m = doc.monty
p1 = doc.monty.python #or m.python; p1 is just the first python element
print
print p1.xml_attributes[(None, u'spam')]
print p1.spam
 
for p in doc.monty.python: #The loop will pick up both python elements
    p.xml_write()

Ejemplo con uso de groupby

from amara import bindery
 
MONTY_XML = """<quotes>
  <quote skit="1">This parrot is dead</quote>
  <quote skit="2">What do you mean "bleh"</quote>
  <quote skit="2">I don't like spam</quote>
  <quote skit="3">But I was looking for argument</quote>
</quotes>"""
 
doc = bindery.parse(MONTY_XML)
q1 = doc.quotes.quote # or doc.quotes.quote[0]
print q1.skit
print q1.xml_attributes[(None, u'skit')] # XPath works too: q1.xml_select(u'@skit')
 
for q in doc.quotes.quote: # The loop will pick up both q elements
    print unicode(q) # Just the child char data
 
from itertools import groupby
from operator import attrgetter
 
skit_key = attrgetter('skit')
for skit, quotegroup in groupby(doc.quotes.quote, skit_key):
    print skit, [ unicode(q) for q in quotegroup ]