在我的工作目录中,给出以下名为 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文件的其他带连字符的部分中成功使用了此技术。由于某种原因,我不知道这个实例给我带来了问题。
答案 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