如何在Beautifulsoup中的新标签下包装多个标签?

时间:2014-10-19 08:07:13

标签: python beautifulsoup

我有一个输入xml结构,如图所示

<sometag> <a></a> <b></b> <c> <d></d> </c>  </sometag>

现在我需要将<sometag>...</sometag>之间的所有内容包装到新标记中,该标记将是sometag

的子标记

所需的结构将是

<sometag> <newtag> <a></a> <b></b> <c> <d></d> </c> </newtag> </sometag>

如何实现这一目标?

我知道我可以使用wrap和unwrap函数两次来实现相同的目的。

soup = BeautifulSoup("<sometag> <a></a> <b></b> <c> <d></d> </c>  </sometag>",'xml')
soup.sometag.wrap(soup.new_tag('newtag'))
soup.sometag.unwrap()
soup.newtag.wrap(soup.new_tag('sometag'))
print soup

但还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:1)

由于您只处理代码名称,因此选项可以将sometag重命名为newtag,然后将newtag换成新的sometag

soup.sometag.name = 'newtag'
soup.newtag.wrap(soup.new_tag('sometag'))

首先换行并重新命名:

soup.sometag.wrap(soup.new_tag('sometag')).sometag.name = 'newtag'