我正在尝试使用xml
解析BeautifulSoup
文件。考虑一个sampleinpt xml
文件,如下所示:
<DOC>
<DOCNO>1</DOCNO>
....
</DOC>
<DOC>
<DOCNO>2</DOCNO>
....
</DOC>
...
此文件包含130个<DOC>
标记。但是,当我尝试使用BeautifulSoup的findAll
函数解析它时,它会检索随机数量的标记(通常在15 - 25之间),但从不检索130.我使用的代码如下:
from bs4 import BeautifulSoup
z = open("filename").read()
soup = BeautifulSoup(z, "lxml")
print len(soup.findAll('doc'))
#more code involving manipulation of results
有谁能告诉我我做错了什么?提前谢谢!
答案 0 :(得分:2)
您告诉BeautifulSoup使用lxml
提供的HTML解析器。如果您有XML文档,则应该坚持使用XML解析器选项:
soup = BeautifulSoup(z, 'xml')
否则解析器将尝试“修复”XML以符合HTML规则。 BeautifulSoup中的XML解析也由lxml
库处理。
请注意,XML 区分大小写,因此您需要立即搜索DOC
元素。
对于XML文档,可能是lxml
提供的ElementTree API更高效;例如,它支持XPath查询,而BeautifulSoup则不支持。
但是,从您的示例中看来,似乎没有一个顶级元素;就好像您的文档由一系列XML文档组成。这会使您的输入无效,而解析器可能只会将第一个元素解析为顶层文档而不是。