Pregunta

from BeautifulSoup import BeautifulStoneSoup

xml_data = """
<doc>
  <test>test</test>
  <foo:bar>Hello world!</foo:bar>
</doc>
"""

soup = BeautifulStoneSoup(xml_data)
print soup.prettify()
make = soup.find('foo:bar')
print make
# prints <foo:bar>Hello world!</foo:bar>

make.contents = ['Top of the world Ma!']
print make
# prints <foo:bar></foo:bar>

¿Cómo se cambia el contenido del elemento, en este caso el elemento en la variable "hacer", sin perder el contenido? Si me podría apuntar a otros módulos de Python wich puede modificar XML-documentos existentes, por favor hágamelo saber.

PS! BeautifulSoup es ideal para screenscraping y análisis de HTML y XML!

¿Fue útil?

Solución

Salida documentación de la en replaceWith . Esto funciona:

make.contents[0].replaceWith('Top of the world Ma!')

Otros consejos

Al usar la versión BeautifulSoup 4 (bs4), se puede lograr el mismo por propiedad actualización string directamente:

from bs4 import BeautifulSoup

xml_data = """
<doc>
  <test>test</test>
  <foo:bar>Hello world!</foo:bar>
  <parent>Hello <child>world!</child></parent>
</doc>
"""

soup = BeautifulSoup(xml_data)
make = soup.find('foo:bar')

make.string = 'Top of the world Ma!'
print make
# prints <foo:bar>Top of the world Ma!</foo:bar>

Este enfoque funciona bien para el caso cuando el elemento contiene otros elementos, y que desea reemplazar todo el contenido con una nueva:

parent = soup.find('parent')
parent.string = 'Top of the world Ma!'

print parent
# prints <parent>Top of the world Ma!</parent>

me encontré con este lugar vieja pregunta en este momento, y la solución proporcionada no era muy adecuado para mí. La investigación adicional me lleva al enfoque anterior, y pensé que tal vez útil para compartir lo que terminé usando aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top