Frage

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>

Wie kann ich den Inhalt des Elements, in diesem Fall das Element in den Variablen „machen“, ohne den Inhalt zu verlieren? Wenn Sie mich zu anderen reinen Python-Modulen zeigen könnten Weichen xml-Dokumente bestehenden ändern können, lassen Sie es mich wissen.

PS! BeautifulSoup ist für Screenscraping und sowohl von HTML und XML-Parsing!

War es hilfreich?

Lösung

Überprüfen Sie die Dokumentation auf replaceWith out . Dies funktioniert:

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

Andere Tipps

BeautifulSoup Version 4 (bs4) verwenden, können Sie das gleiche erreichen, indem Aktualisierung string Eigenschaft direkt:

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>

Dieser Ansatz funktioniert gut für den Fall, wenn das Element andere Elemente enthält, und Sie möchten den gesamten Inhalt durch einen neuen ersetzt werden:

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

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

stieß ich auf diese ziemlich alte Frage gerade jetzt, und die Lösung vorgesehen war nicht ganz geeignet für mich. Weitere Forschung führt mich zu dem obigen Ansatz, und ich dachte, es vielleicht nützlich zu teilen, was mich hier am Ende mit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top