我在python中使用lxml中的XPath在一个HTML文档中搜索。如何获取某个元素的路径?下面是ruby nokogiri的例子:
page.xpath('//text()').each do |textnode|
path = textnode.path
puts path
end
例如,打印'/html/body/div/div1/div1/p/text()1‘,这是我想要在python中获得的字符串。
发布于 2009-10-16 19:23:32
从ElementTree对象使用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))
打印
/foo
/foo/bar[1]
/foo/bar[2]
/foo/bar[2]/baz[1]
/foo/bar[2]/baz[2]
发布于 2009-10-16 11:24:54
查看Xpath and XSLT with lxml from the lxml documentation,它提供了包含文本的元素的路径
一个例子就是
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]']
发布于 2016-09-17 02:48:18
如果在您的代码段中只有元素,并且您想要元素的xpath,那么element.getroottree().getpath(element)
就可以完成这项工作。
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)
https://stackoverflow.com/questions/1577293
复制相似问题