with soup how find_all example beautiful all python xml rendering beautifulsoup lxml

how - python beautifulsoup findall



¿Equivalente del método renderContents() de Beautiful Soup en lxml? (2)

Estás todo el camino hasta allí con tu idea original. element.text te proporciona el primer elemento secundario de texto del elemento y tu comprensión de lista te proporciona todo lo demás. Si concatena las dos cadenas juntas, obtendrá lo que está buscando:

>>> xmlstr = "<sec>header <p>para 0</p> text <p>para 1</p> footer</sec>" >>> element = etree.fromstring(xmlstr) >>> >>> element.text + "".join(map (etree.tostring, element)) ''header <p>para 0</p> text <p>para 1</p> footer'' >>>

Ari.

¿Hay un equivalente del método tag.renderContents() de Beautiful Soup en lxml?

He intentado usar element.text , pero eso no representa etiquetas secundarias, así como ''''.join(etree.tostring(child) for child in element) , pero eso no representa texto hijo. Lo más cerca que he podido encontrar es etree.tostring(element) , pero eso representa las etiquetas de apertura y cierre del element , que no quiero.

¿Hay otro método que estoy pasando por alto (o un enfoque alternativo para lograr esto)?


Una solución hackish:

from lxml import etree def render_contents(element): """ Surely there is a safe lxml built-in for this... """ tagname = element.tag return re.sub(''</%s>/s*$'' % tagname, '''', re.sub(r''^<%s(/s+/w+=".*?")*?>'' % tagname, '''', etree.tostring(element))).strip()

Editar

Realmente, no hay mejor método que esto?