3
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>

如何更改元素的内容,在这种情况下是变量“make”中的元素,而不会丢失内容?如果您能指出其他可以修改现有 xml 文档的纯 python 模块,请告诉我。

PS!BeautifulSoup 非常适合 HTML 和 XML 的屏幕抓取和解析!

4

2 回答 2

12

查看上的文档replaceWith。这有效:

make.contents[0].replaceWith('Top of the world Ma!')
于 2009-04-02T20:09:42.330 回答
5

使用 BeautifulSoup 版本 4 ( bs4),您可以通过直接更新string属性来实现相同的目的:

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>

这种方法适用于元素包含其他元素的情况,并且您希望将整个内容替换为新内容:

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

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

我刚才碰到了这个相当老的问题,提供的解决方案不太适合我。进一步的研究使我采用了上述方法,我认为在这里分享我最终使用的内容可能很有用。

于 2015-04-30T09:21:05.343 回答