2 回答
TA贡献2065条经验 获得超14个赞
lxml.html。
import lxml.html
rexml = ...
def depth(node):
d = 0
while node is not None:
d += 1
node = node.getparent()
return d
tree = lxml.html.fromstring(rexml)
for node in tree.iter('page'):
print depth(node)
for url in node.iterfind('url'):
print url.text
for title in node.iterfind('title'):
print title.text.encode("utf-8")
print '-' * 30
TA贡献1815条经验 获得超10个赞
Python ElementTreeAPI为XML树的深度优先遍历提供了迭代器-不幸的是,这些迭代器没有向调用者提供任何深度信息。
但是您可以编写一个深度优先的迭代器,该迭代器还返回每个元素的深度信息:
import xml.etree.ElementTree as ET
def depth_iter(element, tag=None):
stack = []
stack.append(iter([element]))
while stack:
e = next(stack[-1], None)
if e == None:
stack.pop()
else:
stack.append(iter(e))
if tag == None or e.tag == tag:
yield (e, len(stack) - 1)
注意,这是比通过以下父链接确定深度更有效的(在使用lxml) -即它是O(n)与O(n log n)。
添加回答
举报