2014-10-19 2 views
0

У меня есть структура входного XML, как показаноКак обернуть несколько тегов под новым тегом в Beautifulsoup?

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

Как это можно достичь?

Я знаю, что я могу использовать функцию обертывания и распаковки дважды, чтобы добиться того же.

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

Как вы дело только с именами тегов вариант может быть переименование 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' 
Смежные вопросы