tiempo real matrices graficos grafico graficas graficar coordenadas barras python xml dom xpath nodes

real - python graficos 2d



¿Cómo usar Xpath en Python? (11)

¿Qué es la biblioteca? ¿Hay una implementación completa? ¿Cómo se usa la biblioteca? ¿Dónde está su sitio web?


El paquete lxml soporta xpath. Parece funcionar bastante bien, aunque he tenido algunos problemas con el self :: axis. También está Amara , pero no la he usado personalmente.


La última versión de ElementTree compatible con XPath bastante bien. Al no ser un experto en XPath, no puedo decir con seguridad si la implementación está completa, pero ha satisfecho la mayoría de mis necesidades al trabajar en Python. También he usado lxml y PyXML y me parece que etree es bueno porque es un módulo estándar.

NOTA: Desde entonces he encontrado lxml y para mí es definitivamente la mejor biblioteca XML para Python. También funciona bien con XPath (aunque, de nuevo, quizás no sea una implementación completa).



Otra opción es py-dom-xpath , funciona perfectamente con minidom y es Python puro, así que funciona en appengine.

import xpath xpath.find(''//item'', doc)


Puedes usar el soupparser simple de lxml

Ejemplo:

from lxml.html.soupparser import fromstring tree = fromstring("<a>Find me!</a>") print tree.xpath("//a/text()")


Puedes usar:

PyXML :

from xml.dom.ext.reader import Sax2 from xml import xpath doc = Sax2.FromXmlFile(''foo.xml'').documentElement for url in xpath.Evaluate(''//@Url'', doc): print url.value

libxml2 :

import libxml2 doc = libxml2.parseFile(''foo.xml'') for url in doc.xpathEval(''//@Url''): print url.content


Si desea tener el poder de XPATH combinado con la capacidad de usar también CSS en cualquier momento, puede usar parsel :

>>> from parsel import Selector >>> sel = Selector(text=u"""<html> <body> <h1>Hello, Parsel!</h1> <ul> <li><a href="http://example.com">Link 1</a></li> <li><a href="http://scrapy.org">Link 2</a></li> </ul </body> </html>""") >>> >>> sel.css(''h1::text'').extract_first() ''Hello, Parsel!'' >>> sel.xpath(''//h1/text()'').extract_first() ''Hello, Parsel!''


Suena como un anuncio lxml aquí. ;) ElementTree está incluido en la biblioteca estándar. Bajo 2.6 y por debajo de su xpath es bastante débil, pero en 2.7 ha mejorado mucho :

import xml.etree.ElementTree as ET root = ET.parse(filename) result = '''' for elem in root.findall(''.//child/grandchild''): # How to make decisions based on attributes even in 2.6: if elem.attrib.get(''name'') == ''foo'': result = elem.text break


Utilice LXML. LXML usa todo el poder de libxml2 y libxslt, pero los envuelve en más enlaces "Pythonic" que en los enlaces de Python que son nativos de esas bibliotecas. Como tal, obtiene la implementación completa de XPath 1.0. Native ElemenTree admite un subconjunto limitado de XPath, aunque puede ser lo suficientemente bueno para sus necesidades.


PyXML funciona bien.

No dijo qué plataforma está utilizando, sin embargo, si está en Ubuntu, puede obtenerla con sudo apt-get install python-xml . Estoy seguro que otras distribuciones de Linux también lo tienen.

Si estás en una Mac, xpath ya está instalado pero no está accesible de inmediato. Puede configurar PY_USE_XMLPLUS en su entorno o hacerlo de forma Python antes de importar xml.xpath:

if sys.platform.startswith(''darwin''): os.environ[''PY_USE_XMLPLUS''] = ''1''

En el peor de los casos es posible que tenga que construirlo usted mismo. Este paquete ya no se mantiene, pero aún así funciona bien y funciona con los pitones 2.x modernos. Los documentos básicos están here .


libxml2 tiene una serie de ventajas:

  1. Cumplimiento de la spec
  2. Desarrollo activo y participación comunitaria.
  3. Velocidad. Esto es realmente un envoltorio de Python alrededor de una implementación de C.
  4. Ubicuidad. La biblioteca libxml2 es generalizada y, por lo tanto, bien probada.

Las desventajas incluyen:

  1. Cumplimiento de la spec . Es estricto Cosas como el manejo de espacios de nombres por defecto son más fáciles en otras bibliotecas.
  2. Uso del código nativo. Esto puede ser una molestia dependiendo de cómo se distribuye / implementa su aplicación. Hay RPM disponibles que alivian algo de este dolor.
  3. Manejo manual de recursos. Observe en la muestra debajo de las llamadas a freeDoc () y xpathFreeContext (). Esto no es muy pitónico.

Si está haciendo una selección de ruta simple, ElementTree con ElementTree (que se incluye en Python 2.5). Si necesita un cumplimiento completo de especificaciones o velocidad bruta y puede hacer frente a la distribución de código nativo, vaya con libxml2.

Muestra de libxml2 XPath Use

import libxml2 doc = libxml2.parseFile("tst.xml") ctxt = doc.xpathNewContext() res = ctxt.xpathEval("//*") if len(res) != 2: print "xpath query: wrong node set size" sys.exit(1) if res[0].name != "doc" or res[1].name != "foo": print "xpath query: wrong node set value" sys.exit(1) doc.freeDoc() ctxt.xpathFreeContext()

Muestra de ElementTree XPath Use

from elementtree.ElementTree import ElementTree mydoc = ElementTree(file=''tst.xml'') for e in mydoc.findall(''/foo/bar''): print e.get(''title'').text