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)