Как определить, существуют ли теги XML, атрибуты с использованием Python? - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь выяснить, содержит ли xml текст subtypemismatch = "true" в следующем xml.

<boardgames termsofuse="https://boardgamegeek.com/xmlapi/termsofuse">
    <boardgame objectid="45987" subtypemismatch="true">
        <yearpublished/>

Если я использую BeautifulSoup со следующим кодом, я могу получить «истину» или «ложь», но большая часть XML, которую мне нужно прочитать, не содержит текста подтипа, что приводит к"KeyError: 'subtypemismatch'" для возникновения.Как определить, есть ли в xml этот текст для начала?

data = response.read()      
text = data.decode('utf-8') 
soup = BeautifulSoup(text,'xml')

if soup.find('boardgame')['subtypemismatch'] != 'true':
    do something....

1 Ответ

0 голосов
/ 07 октября 2018

Чтобы избежать получения KeyError, используйте get вместо скобок для доступа к атрибуту:

if soup.find('boardgame').get('subtypemismatch') != 'true':

Если элемент не имеет атрибута, get возвращает None.Вы также можете задать ему значение по умолчанию:

if soup.find('boardgame').get('subtypemismatch', 'false') != 'true':

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

soup = BeautifulSoup(text, 'xml')

for boardgame in soup.find_all('boardgame'):
    if boardgame.has_attr('subtypemismatch'):
        print('has attribute')
    else:
        print('does not have attribute')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...