Este equipo redactor ha estado mucho tiempo buscando para darle resolución a tus interrogantes, te dejamos la soluciones así que nuestro deseo es serte de mucha ayuda.
Solución:
el pitón ElementTree
La API proporciona iteradores para el recorrido en profundidad primero de un árbol XML; desafortunadamente, esos iteradores no brindan ninguna información de profundidad a la persona que llama.
Pero puede escribir un iterador de profundidad primero que también devuelva la información de profundidad para cada elemento:
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)
Tenga en cuenta que esto es más eficiente que determinar la profundidad siguiendo los enlaces principales (al usar lxml
) – es decir, es O(n)
contra O(n log n)
.
Usado 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
import xml.etree.ElementTree as etree
tree = etree.ElementTree(etree.fromstring(rexml))
maxdepth = 0
def depth(elem, level):
"""function to get the maxdepth"""
global maxdepth
if (level == maxdepth):
maxdepth += 1
# recursive call to function to get the depth
for child in elem:
depth(child, level + 1)
depth(tree.getroot(), -1)
print(maxdepth)
Comentarios y puntuaciones del artículo
Si entiendes que ha resultado de utilidad este artículo, nos gustaría que lo compartas con otros seniors de esta forma contrubuyes a extender esta información.