Saltar al contenido

xml.etree.ElementTree obtener profundidad de nodo

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *