print example etree python xpath lxml

python - example - ¿Cómo obtener la ruta de un elemento en lxml?



lxml text (4)

Si todo lo que tiene en su sección de código es el elemento y desea que el elemento xpath lo haga, entonces element.getroottree().getpath(element) hará el trabajo.

from lxml import etree xml = '''''' <test> <a/> <b> <i/> <ii/> </b> </test> '''''' tree = etree.fromstring(xml) for element in tree.iter(): print element.getroottree().getpath(element)

Estoy buscando en un documento HTML usando XPath desde lxml en python. ¿Cómo puedo obtener el camino a un cierto elemento? Aquí está el ejemplo de ruby ​​nokogiri:

page.xpath(''//text()'').each do |textnode| path = textnode.path puts path end

imprime, por ejemplo, '' / html / body / div / div [1] / div [1] / p / text () [1] '' y esta es la cadena que quiero obtener en python.


Use getpath desde objetos getpath .

from lxml import etree root = etree.fromstring(''<foo><bar>Data</bar><bar><baz>data</baz>'' ''<baz>data</baz></bar></foo>'') tree = etree.ElementTree(root) for e in root.iter(): print tree.getpath(e)

Huellas dactilares

/foo /foo/bar[1] /foo/bar[2] /foo/bar[2]/baz[1] /foo/bar[2]/baz[2]


Ver Xpath y XSLT con lxml de la documentación lxml. Esto da la ruta del elemento que contiene el texto

Un ejemplo sería

import cStringIO from lxml import etree f = cStringIO.StringIO(''<foo><bar><x1>hello</x1><x1>world</x1></bar></foo>'') tree = lxml.etree.parse(f) find_text = etree.XPath("//text()") # and print out the required data print [tree.getpath( text.getparent()) for text in find_text(tree)] # answer I get is >>> [''/foo/bar/x1[1]'', ''/foo/bar/x1[2]'']


root = etree.parse(open(''tmp.txt'')) for e in root.iter(): print root.getpath(e)