如何获得lxml中元素的路径?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (225)

我正在使用python里lxml中的XPath搜索HTML文档。我如何才能找到通往某个元素的路径?以下是来自ruby nokogiri的例子:

page.xpath('//text()').each do |textnode|
    path = textnode.path
    puts path
end
提问于
用户回答回答于

一个例子就是

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]']
用户回答回答于

使用getpathElementTree对象。

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]

扫码关注云+社区

领取腾讯云代金券