Python 如何获取lxml中元素的路径?

Python 如何获取lxml中元素的路径?,python,xpath,lxml,Python,Xpath,Lxml,我正在使用python中lxml中的XPath搜索HTML文档。如何获取某个元素的路径?以下是ruby nokogiri的示例: page.xpath('//text()').each do |textnode| path = textnode.path puts path end 打印例如“/html/body/div/div[1]/div[1]/p/text()[1]”,这是我想在python中获得的字符串。使用from ElementTree对象 从lxml导入etree

我正在使用python中lxml中的XPath搜索HTML文档。如何获取某个元素的路径?以下是ruby nokogiri的示例:

page.xpath('//text()').each do |textnode|
    path = textnode.path
    puts path
end
打印例如“/html/body/div/div[1]/div[1]/p/text()[1]”,这是我想在python中获得的字符串。

使用from ElementTree对象

从lxml导入etree
root=etree.fromstring(“”)
数据数据
数据
''')
tree=etree.ElementTree(根)
对于root.iter()中的e:
打印(tree.getpath(e))
印刷品

/foo
/foo/bar[1]
/foo/bar[2]
/foo/bar[2]/baz[1]
/foo/bar[2]/baz[2]
请参见,这给出了包含文本的元素的路径

例如

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]']
导入cStringIO
从lxml导入etree
f=cStringIO.StringIO('helloworld')
tree=lxml.etree.parse(f)
find_text=etree.XPath(“//text()”)
#并打印出所需的数据
为查找文本(树)中的文本打印[tree.getpath(text.getparent())]
#我得到的答案是
>>>['/foo/bar/x1[1]','/foo/bar/x1[2]']

如果代码部分中只有元素,并且希望元素的xpath执行,则
element.getroottree().getpath(元素)
将执行此任务

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)
从lxml导入etree
xml=“”
'''
tree=etree.fromstring(xml)
对于tree.iter()中的元素:
打印元素.getroottree().getpath(元素)

我认为树中的e应该是
。iter():
,即tree.iter。@Jabba,你为什么这么认为?你试过我提供的代码吗?它似乎起作用了,不是吗?你有理由不这样想吗?当你最初写这篇文章时,它可能不存在,而且它实际上并不重要,但是你也可以做
tree=root.getroottree()
来获取ElementTree对象。
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)