En Python 2.6 usando ElementTree, ¿cuál es una buena manera de buscar el XML (como una cadena) dentro de un elemento particular, como lo que puede hacer en HTML y javascript con innerHTML
?Python y ElementTree: return "inner XML" excluyendo elemento padre
He aquí una muestra simplificada del nodo XML estoy empezando con:
<label attr="foo" attr2="bar">This is some text <a href="foo.htm">and a link</a> in embedded HTML</label>
me gustaría terminar con esta cadena:
This is some text <a href="foo.htm">and a link</a> in embedded HTML
He intentado iteración sobre el padre nodo y la concatenación de los tostring()
de los niños, pero eso me dio sólo los subnodos:
# returns only subnodes (e.g. <a href="foo.htm">and a link</a>)
''.join([et.tostring(sub, encoding="utf-8") for sub in node])
puedo hackear una solución usando expresiones regulares, pero tenía la esperanza de que habría algo menos hacky que esto:
re.sub("</\w+?>\s*?$", "", re.sub("^\s*?<\w*?>", "", et.tostring(node, encoding="utf-8")))
hi Emil - su solución funciona bien si todo el texto es dentro de los subelementos, pero se rompe en mi caso donde el texto está directamente dentro del elemento padre. Su nota sobre contenido mixto se aplica claramente aquí, aunque no estoy seguro (todavía) de cómo combinar cabeza, cola y subelementos para emitir una secuencia coherente. –
más cerca ... pero etree.tostring() no incluye la cola de cada subelemento. Y creo que el dom.tail final no es necesario ya que esa es la cadena * después de * un elemento y no dentro de él. –
Parece que no te entiendo Justin - 'empieza aquí',' y' y 'termina aquí' es un texto que está dentro del elemento raíz ?! El fragmento de arriba puede requerir algunos ajustes - puede crear algunos casos de prueba y mejorarlo - consulte el enlace para obtener la documentación sobre cómo manejar el contenido mixto. –