Python BeautifulSoup不会从XML返回标签

时间:2019-10-24 00:08:50

标签: python xml parsing beautifulsoup xml-parsing

在我的工作目录中,给出以下名为 test.xml 的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 中的元素,并最终返回每个 format 元素。我已经尝试了下面的python代码,并返回了 None

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 个答案:

答案 0 :(得分:1)

问题不在于连字符,如果您尝试打印样式标签的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)

演示: Here