Python BeautifulSoup не вернет тег из XML - PullRequest
2 голосов
/ 24 октября 2019

Учитывая приведенный ниже XML с именем test.xml в моем рабочем каталоге:

<workbook>
    <style>
          <style-rule element='worksheet'>
            <format attr='font-family' value='Tahoma' />
            <format attr='font-size' value='15' />
            <format attr='font-weight' value='bold' />
            <format attr='color' value='#ffbe7d' />
          </style-rule>
    </style>
</workbook>

Я пытаюсь вернуть элемент в style-rule и,в конечном счете, каждый из элементов формата также. Я пробовал приведенный ниже код Python и Нет возвращается:

from bs4 import BeautifulSoup
import os

with open(os.getcwd()+'//test.xml') as xmlfile:
    soup = BeautifulSoup(xmlfile, 'html.parser')
    print(soup.style.find('style-rule'))

Я знаю, что использовать команду find из-за наличия дефиса в элементеимя, и были успешны с этой техникой в ​​других разделенных дефисом частях файла XML. По какой-то причине, о которой я не знаю, этот экземпляр вызывает у меня проблемы.

1 Ответ

1 голос
/ 24 октября 2019

Проблема не в дефисе, если вы попытаетесь напечатать innerText тега стиля, вы по какой-то причине получите правило стиля в строковом типе.

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

Обходной путь:

from bs4 import BeautifulSoup
import os

soup = BeautifulSoup(text)
soup = BeautifulSoup(soup.find('style').text)

for format in soup.select('style-rule > format'):
  print(format)

Демоверсия: Здесь

...