Проблема с разбором XML с использованием Beautiful Soup - PullRequest
0 голосов
/ 28 февраля 2019

При попытке заменить некоторые элементы в XML на Beautiful Soup я обнаружил, что для замены нужных элементов мне нужно использовать soup.find_all().string.replace_with().Однако я столкнулся с проблемой, заключающейся в том, что метод soup.find_all() возвращает только элементы типа None.

. Поэтому я попытался разбить мою проблему на максимально простой XML-код:

from bs4 import BeautifulSoup as BS

xml = """
<xml>
    <test tag="0"/>
    <test tag="1"/>
</xml>"""

soup = BS(xml, 'xml')
for elem in soup.find_all("test"):
    print('Element {} has type {}.'.format(elem, elem.type))

Что дает то же самое:

Element <test tag="0"/> has type None.
Element <test tag="1"/> has type None.

Я был бы рад, если бы кто-то мог указать, в чем проблема.

Заранее спасибо

1 Ответ

0 голосов
/ 28 февраля 2019

Ну, я не совсем уверен, что именно вы ищете в качестве вывода, но вы можете заменить атрибуты тега следующим образом:

from bs4 import BeautifulSoup as BS

xml = """
<xml>
    <test tag="0"/>
    <test tag="1"/>
</xml>"""

replace_list = ['0']
replacement = '2'

soup = BS(xml, 'xml')
for elem in soup.find_all("test"):
    if elem['tag'] in replace_list:
        elem['tag'] = replacement
    #print('Element {} has type {}.'.format(elem, elem.name))

xml = str(soup)

print (xml)

Вывод:

<?xml version="1.0" encoding="utf-8"?>
<xml>
<test tag="2"/>
<test tag="1"/>
</xml>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...