首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在lxml中获取元素的路径?

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

Stack Overflow用户
提问于 2009-10-16 10:24:07
回答 4查看 38.6K关注 0票数 37

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

代码语言:javascript
复制
page.xpath('//text()').each do |textnode|
    path = textnode.path
    puts path
end

例如,打印'/html/body/div/div1/div1/p/text()1‘,这是我想要在python中获得的字符串。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-16 19:23:32

从ElementTree对象使用getpath

代码语言:javascript
复制
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))

打印

代码语言:javascript
复制
/foo
/foo/bar[1]
/foo/bar[2]
/foo/bar[2]/baz[1]
/foo/bar[2]/baz[2]
票数 61
EN

Stack Overflow用户

发布于 2009-10-16 11:24:54

查看Xpath and XSLT with lxml from the lxml documentation,它提供了包含文本的元素的路径

一个例子就是

代码语言:javascript
复制
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]']
票数 20
EN

Stack Overflow用户

发布于 2016-09-17 02:48:18

如果在您的代码段中只有元素,并且您想要元素的xpath,那么element.getroottree().getpath(element)就可以完成这项工作。

代码语言:javascript
复制
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)
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1577293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档