BeautifulSoup可以解析自闭合和非自闭合的XML标签吗
情况如下:
XML 文件:
<tag1/>
<tag2>some_data</tag2>
<tag1>some_another_data</tag1>
标签 tag1 有时候是自闭合的,有时候里面会有数据。
代码:
from BeautifulSoup import BeautifulStoneSoup
s = '<tag1/><tag2>some_data</tag2><tag1>some_another_data</tag1>'
soup1 = BeautifulStoneSoup(s)
soup2 = BeautifulStoneSoup(s, selfClosingTags=["tag1"])
print soup1.prettify()
print
print soup2.prettify()
输出:
<tag1>
<tag2>
some_data
</tag2>
</tag1>
<tag1>
some_another_data
</tag1>
<tag1 />
<tag2>
some_data
</tag2>
<tag1 />
some_another_data
在第一种情况下,如果 tag1 后面跟着的不是 tag1,它会“吞掉”下一个标签,因为默认情况下不支持自闭合标签。
在第二种情况下,自闭合标签不支持子标签。
我只是想得到和原始 XML 文档一样的结构。用 BeautifulSoup 可以做到吗?如果可以的话,怎么才能让所有标签默认都是自闭合的?因为有很多 XML 文件,我不想手动去查找这些情况。
2 个回答
0
你可以告诉BeautifulSoup 4(简称“bs4”)使用不同的解析器,比如lxml,只需要在创建的时候指定就可以了。我建议完全避免使用早期版本,也不要使用bs4自带的默认解析器(比如,它在处理省略的结束标签时会出错)。
2
我不太推荐使用BeautifulSoup(连解析HTML都不推荐)。如果你需要处理XML,可以使用标准库里的ElementTree,或者如果你需要更强大的XML库,可以试试lxml。