是的,Beautiful Soup的XML解析器默认不支持解析布尔属性。但可以通过自定义解析器来解决这个问题。
下面是一个示例代码,演示如何使用自定义解析器来解析包含布尔属性的XML:
from bs4 import BeautifulSoup
from bs4.builder import XMLParser
class CustomXMLParser(XMLParser):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.BOOL_ATTRIBUTES = set(['true', 'false', '1', '0'])
def handle_starttag(self, name, attrs, handle_empty_element_tags):
converted_attrs = []
for attr, value in attrs:
# 处理布尔属性
if attr in self.BOOL_ATTRIBUTES:
value = True if value in ('true', '1') else False
converted_attrs.append((attr, value))
super().handle_starttag(name, converted_attrs, handle_empty_element_tags)
xml = """
Some text
Some text
"""
soup = BeautifulSoup(xml, 'xml', parser=CustomXMLParser())
for element in soup.find_all(['element1', 'element2']):
print(element.name, element['boolattr'], element.text)
输出结果:
element1 True Some text
element2 False Some text
在这个示例中,我们继承了XMLParser
类,并重写了handle_starttag
方法。在该方法中,我们检查属性值是否为布尔值,如果是,则将其转换为相应的Python布尔值。然后,我们将转换后的属性值传递给父类的handle_starttag
方法。
通过这种方式,我们可以自定义解析器来处理XML中的布尔属性。