我要解析的XML看起来像这样:
<root>
<group>
<somethingelse>
<group></group>
</somethingelse>
</group>
</root>
如您所见,另一个<group>
的层次结构中有<group>
。使用BeautifulStoneSoup
解析它会将内部<group>
放在外部<group>
之外(参见下面的示例)。
如何防止这种情况并将内部from BeautifulSoup import BeautifulStoneSoup
xml = """
<root>
<group>
<somethingelse>
<group></group>
</somethingelse>
</group>
</root>
"""
def main():
doc = BeautifulStoneSoup(xml)
print doc.prettify()
if __name__ == '__main__':
main()
保留在定义它的位置?
代码
<root>
<group>
<somethingelse>
</somethingelse>
</group>
<group>
</group>
</root>
结果
{{1}}
答案 0 :(得分:2)
升级到BeautifulSoup 4,然后安装lxml
解析器。这种组合正确处理XML:
>>> from bs4 import BeautifulSoup
>>> doc = BeautifulSoup(xml, 'xml')
>>> print doc.prettify()
<?xml version="1.0" encoding="utf-8"?>
<root>
<group>
<somethingelse>
<group/>
</somethingelse>
</group>
</root>
使用以下命令安装两个项目:
pip install beautifulsoup4 lxml
答案 1 :(得分:2)
您使用的是最新版本的BeautifulSoup吗?使用BeautifulSoup4,我设法得到了这个:
from bs4 import BeautifulSoup
doc = BeautifulSoup(xml, features="xml")
print doc.prettify()
结果是:
<?xml version="1.0" encoding="utf-8"?>
<root>
<group>
<somethingelse>
<group/>
</somethingelse>
</group>
</root>