我在使用python中的lxml使用XPath的HTML文檔中進行搜索。我如何獲得某個元素的路徑?下面是從紅寶石引入nokogiri的例子:如何獲取lxml中元素的路徑?
page.xpath('//text()').each do |textnode|
path = textnode.path
puts path
end
打印例如 '/HTML /體/ DIV/DIV [1]/DIV [1]/P /文本()[1]',這是字符串我想要在Python中。
我在使用python中的lxml使用XPath的HTML文檔中進行搜索。我如何獲得某個元素的路徑?下面是從紅寶石引入nokogiri的例子:如何獲取lxml中元素的路徑?
page.xpath('//text()').each do |textnode|
path = textnode.path
puts path
end
打印例如 '/HTML /體/ DIV/DIV [1]/DIV [1]/P /文本()[1]',這是字符串我想要在Python中。
使用來自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]
見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]']
root = etree.parse(open('tmp.txt'))
for e in root.iter():
print root.getpath(e)
如果你^ h在你的代碼段中的元素是元素,你想元素的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)
我認爲它應該是'for e in tree.iter():',即** tree **。iter。 – Jabba 2011-09-17 23:05:20
@Jabba你爲什麼這麼想?你有沒有嘗試過我提供的代碼?它似乎工作,不是嗎?你是否有**理由**去思考否則? – nosklo 2011-09-29 15:11:40
當你最初編寫它時可能並不存在,而不是它實際上很重要,但是你也可以通過'tree = root.getroottree()'來獲得一個ElementTree對象。 – 2017-04-13 18:36:38