Question

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>

Comment puis-je modifier le contenu de l'élément, dans ce cas, l'élément dans la variable « faire », sans perdre le contenu? Si vous pouviez me pointer vers d'autres modules purs python Wich peuvent modifier des documents XML existants, s'il vous plaît laissez-moi savoir.

PS! BeautifulSoup est idéal pour screenscraping et l'analyse syntaxique du HTML et XML!

Était-ce utile?

La solution

Consultez la documentation replaceWith . Cela fonctionne:

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

Autres conseils

En utilisant la version BeautifulSoup 4 (bs4), vous pouvez obtenir le même par mise à jour des biens de string directement:

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>

Cette approche fonctionne bien pour le cas où l'élément contient d'autres éléments, et que vous voulez remplacer le contenu entier par un nouveau:

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

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

je suis tombé sur cette question assez vieux tout à l'heure, et la solution proposée était pas tout à fait convenable pour moi. D'autres recherches me conduit à l'approche ci-dessus, et je pensais qu'il peut être utile de partager ce que je fini par utiliser ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top